Java IO流
来源:互联网 发布:易观的数据来源 编辑:程序博客网 时间:2024/06/02 00:22
Java IO
理解Java I/O 系统
熟练使用java.io包下的相关类与接口进行I/O编程。
掌握Java I/O设计原则与使用模式
File类
File表示文件或目录。可以这么理解File既可以表示文件也可以表示目录,千万别理解成文件就是目录,文件和目录是有区别的。
File类是在java.io包中唯一与文件本身有关的。
其实文件是操作系统中操作数据的最小单元体。
Linux系统分隔符为 / ;window的分隔符为 \。开发的时候最好使用File.separator()表示。
File常用方法:
1.创建文件方法 boolean createNewFile();
2.创建目录: boolean mkdir()、boolean mkdirs();
3.判断是否为一个文件或目录:boolean isFile()、isDirection()
4.判断文件或目录是否存在:boolean exist()
5.获得文件长度:long length()
6.获得目录下的文件列表:File[] listFiles()
7.操作父类相关的方法:File getParentFile()、String getParent()
练习:使用递归的方法列出某个目录下的所有文件(包括子文件夹下面的文件)
备注:递归没有十足的把握就尽量少用,控制不好递归出口的话就会出现内存溢出的危险。
File是使用流操作的入口,相当于反射时候首先第一步是先获得clazz对象。
流操作
程序中所有数据都是以流的方式进行传输或保存的,程序需要数据的时候就使用输入流读取数据,而当程序需要将数据保存到硬盘的话我们就需要使用到输出流。
程序中的输入输出都是以流的方式保存,流中保存的实际上都是字节文件。
java.io包中操作文件内容的主要有两大类:字节流、字符流。字节流能够操作所有类型的数据。字符流只是设计来为操作字符数据的。最核心的四个抽象类:InputStream、OutputStream、Reader、Writer。
数据流操作流程:
1.使用File类打开一个文件
2.通过字节流或字符流的子类,指定输出位置
3.进行读写操作
4.关闭流资源
备注:只要是资源的操作就一定要记得关闭。例如:IO、数据库连接资源。
Java流分类:
流向分:(内存为参照)
输入流:简单理解就是从硬盘读取数据到程序
输出流:简单理解就是从程序写出数据到硬盘
传输单位分:
字节流:以字节为单位传输数据的流
字符流:以字符为单位传输数据的流
功能分:(装饰模式)
节点流:用于直接操作目标设备的流
过滤流:是对一个已经存在的流的链接和封装,通过对数据进行处理为程序提供功能强大、灵活的读写功能。
备注:想要学好Java IO操作需要掌握两点面向对象、装饰设计模式。
备注:在最底层,所有的输入/输出都是以字节形式传输的。字符流只是为了处理字符提供更方便有效的方法。
读数据逻辑:
1.open a stream开启一个数据流
2.while more information如果有更多信息
3.read information读取信息
4.close the stream关闭流操作
写数据的逻辑:
1.open a stream开启一个数据流
2.while more information如果有更多信息
3.write information写出信息
4.close the stream关闭数据流
字节流读取数据:(标准操作字节流读取操作)
//定义缓存大小
byte[] buffer=new byte[100];
Integer len=0;//定义一个读取字节长度
//当输入流还能读取字节的时候,就继续往下读。
while((len=in.read(buffer))!=-1){
System.out.print(new String(buffer,0,len));
}
/关闭流操作
in.close();
字节流写入数据:(标准操作字节流写入操作)
//获得字节输出流
OutputStream out=new FileOutputStream(file);
//要输出的数据
String string="hello world!你好世界。中国 hello china.";
//获得要输出数据的对应字节数组
byte[] bytes=string.getBytes();
//输出字节
out.write(bytes);
IO流的关系图
IO流体系
分析装饰设计模式在Java io设计中的体现
JAVA IO设计中大量使用的装饰设计模式、以及体现了大量面向对象的思想。
Component:顶层组件接口------>InputSteam(抽象类)
ConcreteComponent:顶层接口的实现------>FileInputStream(实现了InputStream抽象类的具体类)
Decorator:顶层装饰类(抽象类也可以)------>FilterInputStream(含有顶层抽象类(InputStream)的引用)
ConcreteDecoratorA:继承顶层装饰类(增加自己的附加功能A)------>BufferInputStream(含有顶层抽象类(InputStream)的引用)
ConcreteDecoratorB:继承顶层装饰类(增加自己的附加功能B)------>DataInputStream(含有顶层抽象类(InputStream)的引用)
备注:其实IO中的FilterInputStream(节点流就相当于这里的Decorator装饰类)
备注:掌握好装饰设计模式、以及面向对象思想,那么IO就很简单了。
流的总结:
InputStream和OutputStream:字节流的输入输出
Reader和Writer:字符流的输入和输出
流的链接:(Java I/O流的设计原则)
对象序列化
将对象转换为字节流保存起来,并在以后还原这个对象,这种机制叫对象序列化。
将一个对象保存到永久存储设备上称为持久化。
一个对象想要能够实现序列化,必须实现Serializable接口(表示性接口,里面没有定义任何方法)或Externalizable接口
对象序列化:是为了将对象以字节形式保存到文件中
对象反序列化:是为了程序将文件中的字节流转换为对象。
当一个对象被序列化时,只保存对象的非静态成员变量,不能保存任何的成员方法和静态成员变量。如果一个对象的成员变量是一个对象,那么这个对象的数据成员也会被保存。
声明为transient、static的变量不被序列化工具存储。
ObjectInputStream、ObjectOutputStream操作对象的流
备注:控制台输入两种方法
Scanner scanner = new Scanner(System.in); JDK1.5之后出现在java.util包中
BufferedReader scanner=new BufferedReader(new InputStreamReader(System.in));JDK1.5之前
- JAVA【IO一】IO流
- Java-IO-java的IO流
- java IO 流
- JAVA之IO流
- java IO(字符流)
- java的io流
- JAVA之IO流(
- JAVA 基础IO流
- JAVA 中的IO流
- Java IO 流学习
- JAVA 中的IO流
- Java IO流操作方法。。
- java io流总结
- 转]JAVA IO流
- JAVA IO流
- Java中的IO流
- JAVA IO 流操作
- 详述JAVA IO流
- 仿制QQ界面
- python与java文件处理中“换行符”引起的小问题
- 算法博客索引
- Android 向右滑动销毁(finish)Activity, 随着手势的滑动而滑动的效果
- lua 支持多点触摸例子
- Java IO流
- eclipse下修改项目名称web.xml出错Attribute "xmlns" was already specified for element "web-app"
- 用邻接矩阵存储的有向图的非递归遍历
- 情比金坚却抵不过岁月洗礼
- xcode5 organizer archive 的一些事
- UIButton 技巧setTitleEdgeInsets
- ANDROID4.0 裁剪与定制
- 2 tomcat的内存的配置?
- ajax初来咋到