上期回顾: 【Java笔记】第14章:异常
个人主页:C_GUIQU
归属专栏:Java
目录
正文
1. IO概念
在 Java 中,IO(输入输出)流是一种数据在内存和其他存储设备之间传输的通道,位于 java.io
包中。
2. 流的分类
2.1 按方向分类
- 输入流:将外部数据读入到 JVM 内存中(读操作)。
- 输出流:将 JVM 内存中的数据写出到外部存储设备(写操作)。
2.2 按单位分类
- 字节流:以字节为单位传输数据,适合操作所有类型文件。
- 字符流:以字符为单位传输数据,适合操作文本文件,例如
.txt
,.java
文件。
2.3 按功能分类
- 节点流:基本的读写功能。
- 过滤流:增强节点流的读写功能。
3. 字节流
3.1 字节流的父类
InputStream
:字节输入流,用于读操作。OutputStream
:字节输出流,用于写操作。
3.2 字节节点流
FileOutputStream(文件字节输出流)
FileOutputStream fos = new FileOutputStream("file/a.txt", true); // true表示追加写入
fos.write(65); // 写入单个字节
fos.close();
FileInputStream(文件字节输入流)
FileInputStream fis = new FileInputStream("file/a.txt");
int data;
while ((data = fis.read()) != -1) {
System.out.print((char) data); // 逐字节读取文件内容
}
fis.close();
3.3 字节过滤流
BufferedInputStream/BufferedOutputStream(缓冲流)
使用缓冲流可以提高读写效率,通过减少对磁盘的访问次数。
BufferedInputStream bis = new BufferedInputStream(new FileInputStream("file/a.txt"));
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("file/b.txt"));
int data;
while ((data = bis.read()) != -1) {
bos.write(data);
}
bos.close();
bis.close();
4. 字符编码
4.1 常见编码方式
- ISO8859-1:西欧编码,每个字符1字节。
- GBK/GB2312/GB18030:简体中文编码,分别支持约6000、2万和7万汉字。
- Big5:繁体中文编码。
- UTF-8:万国码,动态字节数存储,每个字符1~3字节。
4.2 编码与解码
编码将字符转换为二进制,解码则是从二进制还原为字符。编码方式和解码方式需一致,否则会出现乱码。
5. 字符流
5.1 字符流的父类
Reader
:字符输入流,用于读操作。Writer
:字符输出流,用于写操作。
5.2 字符节点流
FileWriter(文件字符输出流)
FileWriter fw = new FileWriter("file/a.txt");
fw.write("Hello, World!"); // 写入字符串
fw.close();
FileReader(文件字符输入流)
FileReader fr = new FileReader("file/a.txt");
int data;
while ((data = fr.read()) != -1) {
System.out.print((char) data); // 逐字符读取内容
}
fr.close();
5.3 字符过滤流
BufferedReader/PrintWriter
使用 BufferedReader
可以高效地读取文本行,PrintWriter
提供了自动换行等功能。
BufferedReader br = new BufferedReader(new FileReader("file/a.txt"));
String line;
while ((line = br.readLine()) != null) {
System.out.println(line); // 逐行读取内容
}
br.close();
6. 字符的桥转流
InputStreamReader
和 OutputStreamWriter
用于字节流和字符流之间的转换,可指定编码格式。
InputStreamReader isr = new InputStreamReader(new FileInputStream("file/a.txt"), "UTF-8");
BufferedReader br = new BufferedReader(isr);
String line;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
br.close();
7. File类
7.1 File类与IO流的区别
- IO流:用于操作文件内容(读取或写入文件内容)。
- File类:用于操作文件本身(创建、删除、重命名文件等)。
7.2 常用方法
File file = new File("file/a.txt");
System.out.println("文件名:" + file.getName()); // 获取文件名
System.out.println("绝对路径:" + file.getAbsolutePath()); // 获取绝对路径
扩展:递归遍历文件夹
使用递归遍历文件夹,查找所有以 .java
结尾的文件。
public static void findJavaFiles(File dir) {
File[] files = dir.listFiles();
for (File file : files) {
if (file.isFile() && file.getName().endsWith(".java")) {
System.out.println(file.getAbsolutePath());
} else if (file.isDirectory()) {
findJavaFiles(file); // 递归遍历子文件夹
}
}
}
结语
感谢您的阅读!期待您的一键三连!欢迎指正!