字节流(InputStream(所有字节输入流的祖先类)/OutputStream(所有字节输出流的祖先类)):两个子类FileOutputStream/FileInputStream;都是对文件进行读取和写入操作。字节流都是一个字节一个字节的读取和写入
字节流读取
FileInputStream in= new FileInputStream("text.txt");
Int b =0;
While(true){
b = in.read();
System.out.println(b);
In.close();//用完必须关闭流
/*也可以这样用字符串输出
byte[] b = new byte[1024];
while ((len = in.read(b)) != -1) {
String string = new String(b, 0, len);
System.out.println(string);
}
*/
字节流输出
FileOutputStream out = new FileOutputStream("text.txt");
byte[] b = { 97, 98, 99 }; //可以输出数组,也可以直接输出数字
fileOutputStream.write(b);
Out.Close();
也有 write(b,off,length); 输出索引的内容
文件的拷贝
创建字节输入流输出流,
Int len;//定义一个int类型的变量,记住每次读取的一个字节
While((len =in.read()!=-1) //如果等于-1说明读完了
Out.write(len);
Byte [] b =new byte[1024];
这是一个缓存区,可以更快速的写入读取
用图来表示
字符流(Reader/Writer)由于它们是抽象类,我们学习它们的子类(FileReader/FileWriter)
字符流操作文件:
FileReader fileReader = new FileReader("test.txt");
FileWriter fileWriter = new FileWriter("test1.txt");
// 创建char作为缓冲
char[] ch = new char[1024];
int len = 0;
while ((len = fileReader.read(ch)) != -1) {
fileWriter.write(ch, 0, len);
缓冲流的概念:就是为了提高文件读取的效率。
字节缓冲流:继承于FilterInputStream/FilterOutputStream类
1:构造方法:public BufferedInputStream(InputStream in)
创建一个 BufferedInputStream 并保存其参数,即输入流 in,以便将来使用。创建一个内部缓冲区数组并将其存储在 buf 中。
2:BufferedOutputStream(OutputStream out)
3:注意:字节缓冲流只能包装字节流。
字符缓冲流
1:构造方法:public BufferedWriter(Writer out)
创建一个使用默认大小输出缓冲区的缓冲字符输出流。
2:public BufferedReader(Reader in)
创建一个使用默认大小输入缓冲区的缓冲字符输入流。
读取的时候 BufferedReader中有一个重要的方法readline(),该方法用于一次读取一行文本
3:注意:字符缓冲流只能包装字符流
不同流之间不能相互包装
数据流(DataInputStream /DataOutStream)
有的时候,并不需要存储整个对象的信息,而只需要储存对象的成员数据,这些成员数据的类型又都是基本数据类型,这时就需要使用 数据流DataInputStream DataOutStream
数据流操作文件
int a = 100000;
DataOutputStream dataOutputStream = new DataOutputStream(
new FileOutputStream("test.txt"));
dataOutputStream.writeInt(a);
dataOutputStream.writeBoolean(true);
dataOutputStream.close();
DataInputStream dataInputStream = new DataInputStream(
new FileInputStream("test.txt"));
System.out.println(dataInputStream.readInt());
System.out.println(dataInputStream.readBoolean());
对象流
如果希望永久保存这些对象,则可以将对象转为字节数据写入到硬盘上,这个过程称为对象序列化。 为此JDK提供了ObjectOutputStream/ObjectInputStream 来实现对象的序列化。
当对象进行序列化时,必须保证该对象实现Serializable接口,否则程序会出现NotSerializableException异常
对象流操作
ObjectOutputStream obj =new ObjectOutputStream(new FileOutputStream("text.txt"));
obj.writeObject(Command.list);
obj.close();
ObjectInputStream obj2 = new ObjectInputStream(new FileInputStream("text.txt"));
Command.list = (ArrayList<Shape>)obj2.readObject();
public class Command {
public static ArrayList<Shape> list=new ArrayList<Shape>();
}
public abstract class Shape implements Serializable