IO流

File 类

在创建对象的时候需要传入文件的路径名,这里需要注意绝对路径和相对路径的关系:

  1. 绝对路径来说,从系统根目录开始写,这个是没有问题的。
  2. 相对路径来说,根目录是当前项目的根目录

File 类有很多的方法直接操作文件属性。

File file = new File("a.txt");
		try {
			file.createNewFile();
			System.out.println("绝对路径是: " + file.getAbsolutePath());
			System.out.println("相对路径是: " + file.getPath());
			System.out.println("文件是" + (file.canWrite()?"可":"不可") +"写的。");
			file.delete();
			File f1 = new File("a/b/c");
			f1.mkdirs();
			f1.delete();
			
		} catch (IOException e) {
			e.printStackTrace();
		}

字节输入流(InputStream)

InputStream 字节流,操作文件的子类FileInputStream调用 read() 方法,默认读一个字节,如果读到文件末尾,返回的是-1。

可以传入参数,参数是字节数组,而此时的返回值就是读入的字节数。

字节输出流(OutputStream)

输入流就比较简单,通常调用write() 方法就好了,参数传入一个需要写入的字节数组。需要注意的就是,在进行创建输出流对象的时候,FileOutputStream(String pathName,boolean append) 第二个参数表示是否在文件中追加,true为追加,false为覆盖原来内容,不追加。

字节流读二进制文件

DataInputStream 类通常用来读取二进制文件,它是 FileInputStream 的

输入流和输出流的区别

输入流和输出流是针对 jvm 来说的,从硬盘中向 jvm 中读入数据,所以就叫做input;而从 jvm 中向硬盘写出数据,所以就叫做output。

字符输入流

字节流和字符流等于是按照读入或者写入的单位不同划分的,InputStream 和 Reader 分为别是字节流和字符流的基类。

常用的子类有,BufferedReader, CharArrayReader, FilterReader, InputStreamReader, PipedReader, StringReader

把字节流转化为字符流的过程

FileInputStream fis = new FileInputStream("src\\test.txt");//创建文件字节流
InputStreamReader isr = new InputStreamReader(fis);//把字节流转化为字符流
BufferedReader br = new BufferedReader(isr);//BufferedReader 是InputStream的子类,调用这一个类的目的是使用 readLine() 方法

字符输出流

字符输出流的的基类是 Writer 类,可以读入一个字符串。比较容易接受。

对象的序列化和反序列化

  1. 序列化:把对象以字节流的形式写到文件里。
  2. 反序列化:从文件中以字节流的形式读入并返回一个对象

使用到的类 ObjectOutputStream 和 ObjectInputStream 两个类。

ObjectOutputStream write():把对象写入到文件中 ObjectInputStream read()的:从文件中读取对象。

graph TD A[输入输出流] --> B[字节流] A --> C[字符流] B --> D[InputStream 输入流基类] D --> d[ObjectOutPutStream 对象输入流] B --> E[OutPutStream 输出流基类] E --> e[ObjectOutPutStream 对象输出流] C --> F[Writer 输出流基类] C --> G[Reader 输入流基类] D --> H[FileInputStream] E --> I[FileOutputStream] H --> J[DataInputStream 用于读取二进制文件] I --> K[DataOutPutStream 用于写入二进制文件] F --> L[FileWriter 一次写入一个字符] G --> M[FileReader 一次读入一个字符] E --> N[OutputStreamWriter 把字节流转化为字符流] F --> N