老师好,我想问一下,把下面三行:
FileOutputStream fos = new FileOutputStream(targetFile);
OutputStreamWriter osw = new OutputStreamWriter(fos, StandardCharsets.UTF_8);
PrintWriter pw = new PrintWriter(osw);
换成下面两行:
FileWriter fw = new FileWriter(targetFile);
PrintWriter pw = new PrintWriter(fw);
这样改动后,有没有什么区别?我运行起来后都是一样的效果。
//新的代码如下
import java.io.*;
import java.util.Scanner;
public class WriteToFilesAppMain {
private static final Scanner in = new Scanner(System.in);
public static void main(String[] args) throws IOException {
File targetFile = createFile();
writeToFile(targetFile);
System.out.println("程序执行结束");
}
private static void writeToFile(File targetFile) throws IOException {
try (
FileWriter fw = new FileWriter(targetFile);
PrintWriter pw = new PrintWriter(fw);
) {
System.out.println("输入的内容会实时写入文件,如果输入空行则结束");
while (true) {
String lineToWrite = in.nextLine().trim();
System.out.println("输入内容为" + lineToWrite);
if (lineToWrite.trim().isEmpty()) {
System.out.println("输入结束");
break;
} else {
pw.println(lineToWrite);
pw.flush();
}
}
} catch (Exception ex) {
ex.printStackTrace();
}
}
private static File createFile() throws IOException {
System.out.println("请输入文件名:");
String fileName = in.nextLine().trim();
File f = new File("." + File.separator + fileName + ".txt");
if (f.isFile()) {
System.out.println("目标文件存在,删除:" + f.delete());
}
System.out.println(f.createNewFile());
return f;
}
}
展开
作者回复: 没有指定Charset,系统会使用默认的charset。中文的Windows上一般会是GBK。在系统默认charset都是GBK的系统上没问题,如果系统的Charset不是GBK,就可能会有乱码。