答案是掌握Java IO流需区分字节流和字符流:字节流以byte为单位,适用于图片、音频等二进制文件,使用FileInputStream和FileOutputStream进行读写;字符流以char为单位,专用于文本处理,通过FileReader和FileWriter自动处理编码,避免乱码;为提升性能,应使用BufferedInputStream、BufferedOutputStream及BufferedReader、BufferedWriter等缓冲流,其中BufferedReader的readLine()方法可按行读取;IO操作必须处理IOException,优先采用try-with-resources语法自动关闭资源,确保无内存泄漏。
在Java中处理数据的输入和输出,核心机制就是IO流。理解基本输入输出流的关键在于掌握字节流和字符流的区别与使用场景,并能根据需求选择合适的类进行读写操作。
字节流以byte为单位传输数据,适用于所有类型的文件,比如图片、音频、视频等。
InputStream 是所有输入字节流的父类,OutputStream 是所有输出字节流的父类。
示例代码:
try (FileInputStream in = new FileInputStream("source.jpg");
FileOutputStream out = new FileOutputStream("copy.jpg")) {
int b;
while ((b = in.read()) != -1) {
out.write(b);
}
} catch (IOException e) {
e.printStackTrace();
}
字符流以char为单位操作数据,适合处理文本文件,能自动处理字符编码转换。
Reader 和 Writer 分别是字符输入输出流的抽象基类。
示例代码:
try (FileReader reader = new FileReader("note.txt");
FileWriter writer = new FileWriter("output.txt")) {
int ch;
while ((ch = reader.read()) != -1) {
writer.write(ch);
}
} catch (IOException e) {
e.printStackTrace();
}
直接使用基础流读写效率较低,Java提供了带缓冲的包装流来优化操作。
推荐用法:
try (BufferedReader br = new BufferedReader(new FileReader("data.txt"));
BufferedWriter bw = new BufferedWriter(new FileWriter("result.txt"))) {
String line;
while ((line = br.readLine()) != null) {
bw.write(line.toUpperCase());
bw.newLine();
}
}
IO操作容易引发 IOException,必须做好异常捕获和资源释放。
基本上就这些。掌握这些基础用法后,就能应对大多数文件读写需求了。不复杂但容易忽略细节,比如编码设置和流关闭顺序。