Java回顾之I/O(Java I/O操作全回顾:从基础到进阶指南)
原创
一、Java I/O概述
Java I/O(输入/输出)是Java编程语言中用于处理数据流的核心机制。Java I/O提供了大量的类和接口,用于文件的读写、网络通信等操作。Java I/O操作核心分为两大类:字节流和字符流。
二、Java I/O基础
Java I/O操作的核心是流(Stream),流可以看作是数据流动的通道。Java提供了两种基本的流类型:字节流和字符流。
2.1 字节流
字节流用于处理字节数据,它以字节为单位进行读写操作。Java中字节流的抽象基类是InputStream和OutputStream。
2.2 字符流
字符流用于处理字符数据,它以字符为单位进行读写操作。Java中字符流的抽象基类是Reader和Writer。
三、Java I/O常用类
3.1 InputStream和OutputStream
InputStream和OutputStream是所有字节流的超类。InputStream用于读取字节输入流,OutputStream用于写入字节输出流。
3.1.1 FileInputStream
FileInputStream是InputStream的子类,用于读取文件。
FileInputStream fis = new FileInputStream("example.txt");
int b;
while ((b = fis.read()) != -1) {
System.out.print((char) b);
}
fis.close();
3.1.2 FileOutputStream
FileOutputStream是OutputStream的子类,用于写入文件。
FileOutputStream fos = new FileOutputStream("example.txt");
fos.write('A');
fos.write('B');
fos.write('C');
fos.close();
3.2 Reader和Writer
Reader和Writer是所有字符流的超类。Reader用于读取字符输入流,Writer用于写入字符输出流。
3.2.1 FileReader
FileReader是Reader的子类,用于读取文件。
FileReader fr = new FileReader("example.txt");
char[] buffer = new char[1024];
int len;
while ((len = fr.read(buffer)) != -1) {
System.out.print(new String(buffer, 0, len));
}
fr.close();
3.2.2 FileWriter
FileWriter是Writer的子类,用于写入文件。
FileWriter fw = new FileWriter("example.txt");
fw.write("Hello World");
fw.close();
四、Java I/O进阶
4.1 缓冲流
缓冲流可以尽也许降低损耗I/O操作的高效,通过降低实际的读写次数来降低磁盘访问次数。BufferedInputStream和BufferedOutputStream分别是InputStream和OutputStream的包装类,BufferedReader和BufferedWriter分别是Reader和Writer的包装类。
4.1.1 BufferedReader和BufferedWriter
BufferedReader和BufferedWriter提供了缓冲功能,可以降低读写操作的次数。
BufferedReader br = new BufferedReader(new FileReader("example.txt"));
String line;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
br.close();
BufferedWriter bw = new BufferedWriter(new FileWriter("example.txt"));
bw.write("Hello World");
bw.newLine();
bw.write("Java I/O");
bw.close();
4.2 转换流
转换流用于在不同的字符编码之间转换。InputStreamReader和OutputStreamWriter是转换流的两个核心类。
4.2.1 InputStreamReader
InputStreamReader将字节流演化为字符流。
InputStreamReader isr = new InputStreamReader(new FileInputStream("example.txt"), "UTF-8");
char[] buffer = new char[1024];
int len;
while ((len = isr.read(buffer)) != -1) {
System.out.print(new String(buffer, 0, len));
}
isr.close();
4.2.2 OutputStreamWriter
OutputStreamWriter将字符流演化为字节流。
OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("example.txt"), "UTF-8");
osw.write("Hello World");
osw.close();
五、Java I/O高级应用
5.1 序列化
序列化是指将对象的状态信息演化为可存储或传输的形式的过程。在Java中,序列化可以通过实现Serializable接口来完成。
class Person implements Serializable {
private static final long serialVersionUID = 1L;
private String name;
private int age;
// 构造器、getter和setter方法
}
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("person.ser"));
Person person = new Person("Alice", 30);
oos.writeObject(person);
oos.close();
ObjectInputStream ois = new ObjectInputStream(new FileInputStream("person.ser"));
Person person2 = (Person) ois.readObject();
ois.close();
5.2 文件操作
Java I/O提供了多种文件操作类,如File、Files和Paths。
5.2.1 File类
File类用于文件和目录的操作。
File file = new File("example.txt");
if (file.exists()) {
System.out.println("文件存在");
} else {
System.out.println("文件不存在");
}
String[] files = file.list();
for (String f : files) {
System.out.println(f);
}
5.2.2 Files和Paths类
Files和Paths类提供了更加现代和灵活的文件操作对策。
Path path = Paths.get("example.txt");
System.out.println(Files.exists(path));
try (Stream
paths = Files.walk(path)) { paths.forEach(System.out::println);
}
六、总结
Java I/O是Java编程中非常重要的一部分,掌握Java I/O操作对于处理文件和数据流至关重要。本文从基础到进阶,详细介绍了Java I/O的核心概念、常用类和高级应用,愿望对读者有所帮助。
以上是一篇涉及Java I/O操作的回顾文章,从基础概念到高级应用都有涉及。文章采用HTML格式编写,使用了`