(译)Java一行一行写入文件

这篇博客总结了能够用来将数据写入一个文件的一些类。

1. FileOutputStream

1
2
3
4
5
6
7
8
9
10
11
12
13
public static void writeFile1() throws IOException {
File fout = new File("out.txt");
FileOutputStream fos = new FileOutputStream(fout);

BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(fos));

for (int i = 0; i < 10; i++) {
bw.write("something");
bw.newLine();
}

bw.close();
}

这个例子使用了FileOutputStream类,相反你可以使用对文本文件操作更加友好的FileWriter类和PrintWriter类。

2. FileWriter

1
2
3
4
5
6
7
8
9
public static void writeFile2() throws IOException {
FileWriter fw = new FileWriter("out.txt");

for (int i = 0; i < 10; i++) {
fw.write("something");
}

fw.close();
}

3. PrintWriter

1
2
3
4
5
6
7
8
9
public static void writeFile3() throws IOException {
PrintWriter pw = new PrintWriter(new FileWriter("out.txt"));

for (int i = 0; i < 10; i++) {
pw.write("something");
}

pw.close();
}

4. OutputStreamWriter

1
2
3
4
5
6
7
8
9
10
11
12
public static void writeFile4() throws IOException {
File fout = new File("out.txt");
FileOutputStream fos = new FileOutputStream(fout);

OutputStreamWriter osw = new OutputStreamWriter(fos);

for (int i = 0; i < 10; i++) {
osw.write("something");
}

osw.close();
}

5. 它们的不同

Java文档中说:

FileWriter类是一个很适合写入字符文件的类。这个类的构造函数已经默认了文件的编码方式和字节缓冲数组的大小是可以接受的。如果想要手动指定这些值,你可以使用FileOutputStream来构造一个OutputStreamWriter类的对象。

PrintWriter类会将类按照既定的格式输出到文本文件当中。这个类实现了所有在PrintStream接口中的打印方法。它不包含写入原生字节的方法,因为一个程序需要使用未编码的字节流。

主要的区别就是PrintWriter类提供了一些额外的方法用来处理格式,比如printlnprintf。另外,FileWriter会在I/O失败时抛出IOException的异常。PrintWriter的方法不会抛IOException的异常,相反它会使用一个布尔型的信标(flag),而这个信标可以使用checkError()方法来标识错误。在每写入一字节的数据后PrintWriter都会自动地调用flush(清空)方法。在使用FileWriter类的时候,调用者需要小心调用flush方法。

译者记在Guava中其实还有更多类似于这样的方法,极大地提升了我们的编程效率!欢迎访问本站的Guava教程

译文原文地址:http://www.programcreek.com/2011/03/java-write-to-a-file-code-example/

分享到