IO流学习
Java IO流操作与文件处理摘要 Java提供了File类用于操作文件和目录,包含获取属性、判断类型、删除等基本方法。IO流分为字节流(InputStream/OutputStream)和字符流(Reader/Writer),按流向分为输入/输出流。字节流适合处理所有文件类型,字符流专门处理文本文件。为提高效率,可使用缓冲流(BufferedInputStream等),其内置8192字节缓冲区减
1.File类
java.io.File
一个File类的对象表示一个抽象的计算机中文件或目录(文件夹)
具体方法:
file.length();//获得文件内容的长度
file.getName();//获得文件名 file.getPath();//获得文件位置
file.isHidden();//判断是否为隐藏文件 file.canRead();//判断该文件是否可读
file.canWrite();//判断该文件是否可写
file.isFile();//判断是否为文件 file.isDirectory();//判断是否为文件夹
file.exists();//判断文件是否存在 file.delete();//删除文件
//文件夹的创建
File file = new File(pathname: " ");//括号内写出该文件所在的地址
if(!file.exists()){
file.mkdir();//创建文件夹
//file.mkdirs(); 创建多级目录(文件夹)
}
String[] files = file.list();
返回给定目录所有的子级(文件或文件夹),字符串形式
File[] files = file.list();
与之同理,但返回的是文件对象,可对其进行其他操作。
2.输入和输出
输入:把电脑上的文件读到程序中。
输出:把读取到程序中的数据,写到目标位置的操作。
输入和输出都是相对于程序来讲的。
在java语言中,提供许多可以进行读和写操作的类,我们把这些类形象的称为流。
IO流---->java提供读写文件的类。
3.IO流的分类
1.按照读取单位分类:
<1>字节流:读取时以字节为单位,这种流可以读取任何文件。
<2>字符流:以字符为单位读取
2.按照流的流向分类:
<1>输入流 <2>输出流
字节流
InputStream 和 OutputStream 抽象类
FileInputStream 实现类
//创建一个输入的管道,对接到我们要读取的文件上
FileInputStream inputStream = new FileInputStream("D:/a.txt");
//同理创建一个输出的管道
FileOutputStream outputStream = new FileOutputStream("C:/a.txt");
具体类实现:
byte[] bytes = new byte[];//储存每次读取的字节内容
int length = 0;//记录实际向数组装入的字节个数
while ((length=inputStream.read(bytes))!=-1){
FileOutputStream outputStream = new FileOutputStream("D:/temp.txt");
outputStream.write(bytes,0,length);//每次往后写出byte数组个字节内容,从0开始,写length个
outputStream.close();
}
inputStream.close();
inputStream.read(bytes) 每次读byte数组个字节内容,返回值也是int,返回的是每次往数组中装入的实际字节个数,读完后返回-1.
字符流(只能读文本文件)
<1>输入流 Reander <2> 输出流 Writer
<1>InputStreamReader 转换流 把字节转为字符(FileReader实现类)
<2>OutputStreamWriter 转换流 把字符转为字节(FileWriter实现类)
节点流和处理流(根据封装类型区分)
节点流:
如果封装的是如文件,字符串,字符串数组等,称为节点流。
处理流:
处理流封装的是其他流对象,提供了额外功能。
缓冲字节流
其内部有一个默认长度为8192的字节数组,进行一个数据的缓存。

如图所示,该部分代码为缓冲字节流的具体实现,缓冲字节流是javaIO中用于提高字节数据读取效率的流,其核心作用是通过内存缓冲区减少直接与底层设备(如磁盘、网络)的 IO 交互次数,从而显著提高 IO 性能。
数据处理流
String s = "你好,吃了吗?";
FileOutputStream fileOutputStream = new FileOutputStream("D:/demo.txt");
DataOutputStream dataOutputStream = new DataOutputStream(fileOutputStream);
dataOutputStream.writeUTF(s);//直接写出一个字符串
dataOutputStream.flush();
dataOutputStream.close();
FileInputStream fileInputStream = new FileInputStream("D:/demo.txt");
DataInputStream dataInputStream = new DataInputStream(fileInputStream);
String str = dataInputStream.readUTF();//利用数据输入流直接读取一个字符串
dataInputStream.close();
在 Java IO 中,数据处理流(Data Stream) 指的是 DataInputStream 和 DataOutputStream,它们是用于读写基本数据类型(如 int、double、boolean 等)和字符串的过滤流(需包装底层字节流使用)。其核心作用是方便地按 “数据类型” 而非字节序列读写数据,解决了基础字节流只能只能处理字节 / 字节数组 ** 的局限性。
缓冲字符流
//缓冲字符流
FileReader fileReader = new FileReader("D:/demo11.txt");
BufferedReader bufferedReader = new BufferedReader(fileReader);
FileWriter fileWriter = new FileWriter("D:/demo.txt",true);
BufferedWriter bufferedWriter = new BufferedWriter(fileWriter);
String line = "";
while ((line=bufferedReader.readLine())!=null){
bufferedWriter.write(line);
bufferedWriter.newLine();
}
bufferedReader.close();
bufferedWriter.flush();
bufferedWriter.close();
缓冲字符流是针对字符数据(如文本)设计的缓冲流,核心作用是:
- 高效读写字符:通过内存缓冲区批量处理字符,减少底层 IO 操作次数(与缓冲字节流的缓冲逻辑类似),提升文本读写性能。
- 直接操作字符数据:支持
String、char等字符类型,无需手动将字节转换为字符(内部自动处理字符编码)。 - 提供便捷方法:例如
BufferedReader的readLine()可一次读取一行文本,BufferedWriter的newLine()可跨平台输出换行符,极大简化文本处理。
缓冲字符流与缓冲字节流的:
- 共性:两者都通过缓冲区减少底层 IO 次数,提升读写效率。
- 差异核心:缓冲字符流面向文本数据(处理字符,依赖编码),缓冲字节流面向二进制数据(处理字节,不依赖编码)。
- 选择原则:处理文本用缓冲字符流(简化编码和换行处理),处理非文本(图片、视频等)用缓冲字节流(避免编码干扰)。
对象的序列化和反序列化
Java中的对象都存储在内存中,一旦程序运行结束,内存中的对象就会消失。有时,需要在程序停止时,将对象数据长久保存下来,下次启动程序时,可以继续使用。
IO中提供对象输入/输出流,这种对象操作,也称为对象序列化(输出)和反序列化(输入),反序列化也是java中创建对象的方式之一。
当一个类需要被序列化(对象输出)时,该类需要实现Serializeable接口,该类可以为我们自动生成一个唯一编号,这样在类信息发生改变时,也能保证正常的运行。
以下是具体的实现:

该程序运用了对象序列化的操作,将Car类的信息储存在了一个txt文件中。
更多推荐


所有评论(0)