JavaIO总结
File文件操作类
- File类是唯一一个与文件操作本身(创建、删除、取得信息)有关的程序类。
- 实际项目部署环境可能与开发环境不同。
Windows–“\”
Unix–“/”
所以在使用路径分隔符时都会采用File类的一个常量“separator”,例如: -
File file = new File(File.separator + “Users” + File.separator + “9721” + File.separator + “Desktop”+File.separator + “TestIO.java”);
目录操作
- 取得父路径:getParent()
- 取得符File对象:getParentFile()
-
创建目录:mkdirs()
取得文件信息:
- 判断路径是否是文件:public boolean isFile()
- 判断路径是否是目录:public boolean isDirectory()
- 取得文件大小:public long length()
- 最后一次修改日期:public long lastModiied()
-
列出目录中的内容:listFiles()–这个方法本身只能够列出本目录中的第一级信息
字节流与字符流
File类不支持文件内容处理,如果要处理文件内容,必须要通过流的操作模式来完成。流 分为输入流和输出流。 在java.io包中,流分为两种:字节流与字符流
- 字节流:InputStream、OutputStream
- 字符流:Reader、Writer
-
字节流与字符流的区别:字节流是原生的操作,而字符流是经过处理后的操作
字节输出流(OutputStream)——–抽象类
- OutputStream类实现了Closeable,Flushable两个接口
-
由于OutputStream是一个抽象类,所以要想为父类实例化,就必须要使用子类。由于方法名称都由父类声明好 了,所以我们在此处只需要关系子类的构造方法。如果要进行文件的操作,可以使用FileOutputStream类来处理, 这个类的构造方法如下:
接收File类(覆盖):public FileOutputStream(File file) throws FileNotFoundException
接收File类(追加):public FileOutputStream(File file, boolean append
AutoCloseable自动关闭支持
- 从JDk1.7开始追加了一个AutoCloseable接口,这个接口的主要目的是自动进行关闭处理,但是这种处理一般不好 用,因为使用它必须结合try..catch
字节输入流(InputStream)–抽象类
- 从JDk1.7开始追加了一个AutoCloseable接口,这个接口的主要目的是自动进行关闭处理,但是这种处理一般不好 用,因为使用它必须结合try..catch
- 只实现了Closeable接口
-
提供的方法:
1、读取数据到字节数组中,返回数据的读取个数。如果此时开辟的字节数组大小大于读取的数据大小,则返 回的就是读取个数;如果要读取的数据大于数组的内容,那么这个时候返回的就是数组长度;如果没有 数据了还在读,则返回-1: public int read(byte b[]) throws IOException.最常用方法
2、读取部分数据到字节数组中,每次只读取传递数组的部分内容,如果读取满了则返回长度(len),如果没有 读取满则返回读取的数据个数,如果读取到后没有数据了返回-1:public int read(byte b[], int off, int len) throws IOException
3、读取单个字节,每次读取一个字节的内容,直到没有数据了返回-1:public abstract int read() throws IOException;
字符输出流(Writer)
- 字符适合处理中文数据
- 有Closeable,Flushable、Appendable接口
字符输入流(Reader)
-
在Reader类中没有方法可以直接读取字符串类 型,这个时候只能通过字符数组进行读取操作
转换流
转换流的基本操作
- OutputStreamWriter:将字节输出流变为字符输出流(Writer对于文字的输出要比OutputStream方 便)
-
InputStreamReader:将字节输入流变为字符输入流(InputStream读取的是字节,不方便中文的处理)
内存操作流程
- 字节内存流:ByteArrayInputStream、ByteArrayOutputStream
-
字符内存流:CharArrayReader、CharArrayWriter
打印流
-
PrintStream、printWriter
System类对IO的支持
- 在System类中定义了三个操作的常量
- 标准输出(显示器)
- 错误输出
- 标准输入(键盘) -
系统输出:
- out:
- System.out是PrintStream的实例化对象,而PrintStream又是OutputStream的子类,所以可以直接使用System.out直接为OutputStream实例化,这个时候的OutputStream输出的位置将变为屏幕
- err- 系统输入in
- System.in直接对应的InputStream
- System.in直接对应的InputStream
两种输入流
#BuffereReader类
BufferedReader类属于一个缓冲的输入流,而且是一个字符流的操作对象。
- 系统输入in
- 缓冲流:
- 字节缓冲流:BufferedInputStream
- 字符缓冲流:BufferedReader
- 创建BufferedReader的基本语法:
BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); - 从BufferedReader对象读取一个字符要使用read()方法
- 对象序列化指的是:将内存中保存的对象变为二进制数据流的形式进行传输,或者是将其保存在文本中
- 序列化接口:Serializable
- 序列化接口:Serializable
读写文件
FileInputStream
- 该留用于从文件读取数据,他的对象可以用关键字new来创建
- 可以使用字符串类型的文件名来创建一个输入流对象来读取文件:
InputStream f = new FileInputStream(“C:/java/hello”); - 也可以使用一个文件对象来创建一个输入流对象来读取文件。我们首先得使用 File() 方法来创建一个文件对象:
File f = new File(“C:/java/hello”);
InputStream out = new FileInputStream(f);
FileOutputStream
- 该类用来创建一个文件并向文件中写数据。
- 使用字符串类型的文件名来创建一个输出流对象:
OutputStream f = new FileOutputStream(“C:/java/hello”) - 也可以使用一个文件对象来创建一个输出流来写文件。我们首先得使用File()方法来创建一个文件对象:
File f = new File(“C:/java/hello”);
OutputStream f = new FileOutputStream(f);