我正在尝试通过省略原始文件中不满足特定要求的某些行来创建文件的修改版本。我不知道如何实现这一点。当我读取文件时,我使用
BufferedReader(new FileReader(new File(...)))
我想我会使用 BufferedWriter 写入文件,但我以前从未使用过 BufferedWriter。我对 write() 方法感到困惑。之间有什么区别(除了它们采用不同参数的明显区别之外)
write(char[] cbuf, int off, int len)
和
write(String s, int off, int len)
我什么时候应该使用其中一种而不是另一种?如果我只想写满足特定要求的行,像这样的东西会起作用:
if(/** meets specific condition */) {
out.write(/**not sure which of the two above to use*/);
}
或者我应该使用另一种类型的编写器,例如 FileWriter?
最佳答案
BufferedWriter
也继承 write(String)
来自 Writer
,它只接受一个字符串。您可以自己附加换行符。
myBufferedWriter.write(str + "\n");
或者:
myBufferedWriter.write(str);
myBufferedWriter.newLine();
查看 BufferedWriter
的文档在“方法摘要”部分的底部,您将看到“继承自...的方法”。所有 javadoc 都有这种格式。在那里您可以找到它继承的方法的列表。
请注意,FileWriter
还有一个write(String)
,您可以直接使用它。 BufferedWriter
提供了额外的缓冲层,这对于提高写入大量数据的应用程序的性能很有用,但可能对您的情况没有太大影响。不过,BufferedWriter
确实添加了newLine()
,这可能会让你的船漂浮起来。
或者,您可以使用 PrintWriter
,然后您将拥有 println()
.
至于您关于 write(char[], int, int)
与 write(String, int, int)
的问题 - 当您想从源代码中编写特定的子字符串,而不是编写整个内容。例如:
myBufferedWriter.write("Baseballs are square", 4, 5);
会写“球”。
char[]
与 String
只是如何保存要写入的数据的问题。您可以从 String
写入,也可以从 char
数组写入:
char[] arr = new char[]{'m','a','t','h','e','m','a','t','i','c','a','l','!'};
String str = "mathematical!";
myBufferedWriter.write(arr); // char[]
myBufferedWriter.write(new String(arr)); // String
myBufferedWriter.write(str); // String
myBufferedWriter.write(str.toCharArray()); // char[]
关于java - 如何从一个文件复制到另一个文件但省略某些行/使用哪个 .write() ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22431980/