在Java中,字符流用于处理字符数据,对文本数据而言,字符流比字节流更加高效。两个最基本的字符流类是Reader
和Writer
,分别代表输入字符流和输出字符流。以下是一些常用的字符流实践例子:
FileReader 和 FileWriter
这些是用于文件I/O的字符流类。FileReader
用于读取文件中的文本数据,FileWriter
用于将文本数据写入文件。
读取文件示例
import java.io.FileReader;
import java.io.IOException;
public class FileReaderExample {
public static void main(String[] args) {
FileReader fr = null;
try {
fr = new FileReader("example.txt");
int content;
while ((content = fr.read()) != -1) {
// content 是读取的字符数据
System.out.print((char) content);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if (fr != null) {
try {
fr.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
写入文件示例
import java.io.FileWriter;
import java.io.IOException;
public class FileWriterExample {
public static void main(String[] args) {
FileWriter fw = null;
try {
fw = new FileWriter("example.txt");
String text = "Hello, World!";
fw.write(text);
System.out.println("Write to file completed.");
} catch (IOException e) {
e.printStackTrace();
} finally {
if (fw != null) {
try {
fw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
BufferedReader 和 BufferedWriter
这些类提供缓冲功能来提升I/O性能。BufferedReader
和BufferedWriter
分别包装一个Reader
和Writer
,并为它们提供缓冲区。
使用缓冲读取文件示例
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
public class BufferedReaderExample {
public static void main(String[] args) {
BufferedReader br = null;
try {
br = new BufferedReader(new FileReader("example.txt"));
String line;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if (br != null) {
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
使用缓冲写入文件示例
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
public class BufferedWriterExample {
public static void main(String[] args) {
BufferedWriter bw = null;
try {
bw = new BufferedWriter(new FileWriter("example.txt"));
bw.write("Hello, World!");
bw.newLine(); // 写入一个新行
bw.write("Hello, BufferedWriter!");
System.out.println("Write to file completed.");
} catch (IOException e) {
e.printStackTrace();
} finally {
if (bw != null) {
try {
bw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
PrintWriter
PrintWriter
是另一个用于输出文本数据的类,可以很方便地写入各种数据类型,包括对象。
使用PrintWriter写入文件示例
import java.io.PrintWriter;
import java.io.IOException;
public class PrintWriterExample {
public static void main(String[] args) {
PrintWriter pw = null;
try {
pw = new PrintWriter("example.txt");
pw.println("Hello, PrintWriter!");
pw.println(123);
pw.printf("You have %d new messages", 5);
System.out.println("Write to file completed.");
} catch (IOException e) {
e.printStackTrace();
} finally {
if (pw != null) {
pw.close();
}
}
}
}
在使用字符流时,要注意以下几点:
- 使用合适的字符集编码,尤其是当处理不同国家或地区的文本数据时。
- 总是在一个
finally
块中关闭流,以确保即使发生异常也会释放资源。 - 对于输出流,调用
flush()
可以确保所有数据都被写