PrintWriter vs FileWriter in Java

2019-01-08 06:27发布

Are PrintWriter and FileWriter in Java the same and no matter which one to use? So far I have used both because their results are the same. Is there some special cases where it makes sense to prefer one over the other?

public static void main(String[] args) {

    File fpw = new File("printwriter.txt");
    File fwp = new File("filewriter.txt");
    try {
        PrintWriter pw = new PrintWriter(fpw);
        FileWriter fw = new FileWriter(fwp);
        pw.write("printwriter text\r\n");
        fw.write("filewriter text\r\n");
        pw.close();
        fw.close();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

}

7条回答
家丑人穷心不美
2楼-- · 2019-01-08 07:10

A PrintWriter has a different concept of error handling. You need to call checkError() instead of using try/catch blocks.

查看更多
一纸荒年 Trace。
3楼-- · 2019-01-08 07:15

Both of these use a FileOutputStream internally:

public PrintWriter(File file) throws FileNotFoundException {
this(new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file))),
     false);
}



public FileWriter(File file) throws IOException {
super(new FileOutputStream(file));
}

but the main difference is that PrintWriter offers special methods:

Prints formatted representations of objects to a text-output stream. This class implements all of the print methods found in PrintStream. It does not contain methods for writing raw bytes, for which a program should use unencoded byte streams.

Unlike the PrintStream class, if automatic flushing is enabled it will be done only when one of the println, printf, or format methods is invoked, rather than whenever a newline character happens to be output. These methods use the platform's own notion of line separator rather than the newline character.

查看更多
欢心
4楼-- · 2019-01-08 07:15

PrintWriter doesn't throw IOException.You should call checkError() method for this purpose.

查看更多
Anthone
5楼-- · 2019-01-08 07:19

The java.io.PrintWriter in Java5+ allowed for a convenience method/constructor that writes to file. From the Javadoc;

Creates a new PrintWriter, without automatic line flushing, with the specified file. This convenience constructor creates the necessary intermediate OutputStreamWriter, which will encode characters using the default charset for this instance of the Java virtual machine.

查看更多
爷的心禁止访问
6楼-- · 2019-01-08 07:23

According to coderanch.com, if we combine the answers we get:

FileWriter is the character representation of IO. That means it can be used to write characters. Internally FileWriter would use the default character set of the underlying OS and convert the characters to bytes and write it to the disk.

PrintWriter & FileWriter.

Similarities

  1. Both extend from Writer.
  2. Both are character representation classes, that means they work with characters and convert them to bytes using default charset.

Differences

  1. FileWriter throws IOException in case of any IO failure, this is a checked exception.
  2. None of the PrintWriter methods throws IOException , instead they set a boolean flag which can be obtained using checkError().
  3. PrintWriter has on optional constructor you may use to enable auto-flushing when specific methods are called. No such option exists in FileWriter.
  4. When writing to files, FileWriter has an optional constructor which allows it to append to the existing file when the "write()" method is called.

Difference between PrintStream and OutputStream: Similar to above explanation, just replace character with byte.

PrintWriter has following methods :

close()
flush()
format()
printf()
print()
println()
write()

and constructors are :

File (as of Java 5)
String (as of Java 5)
OutputStream
Writer

while FileWriter having following methods :

close()
flush()
write()

and constructors are :

File
String 

Link: http://www.coderanch.com/t/418148/java-programmer-SCJP/certification/Information-PrintWriter-FileWriter

查看更多
等我变得足够好
7楼-- · 2019-01-08 07:27

The fact that java.io.FileWriter relies on the default character encoding of the platform makes it rather useless to me. You should never assume something about the environment where your app will be deployed.

查看更多
登录 后发表回答