我尝试通过省略原始文件中的某些行来创建文件的修改版本(如果它们不符合某个要求)。我不知道如何做到这一点。当我读入文件时,我使用
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?
答案 0 :(得分:3)
BufferedWriter
也会从Writer
继承write(String)
,只需要一个字符串。您可以自己附加换行符。
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)
的问题 - 当你想从源代码编写特定的子字符串而不是编写整个东西时,这两个都很有用。 E.g:
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[]
答案 1 :(得分:1)
建议:
1)使用BufferedReader / FileReader,以便使用“readLine()”:
BufferedReader in = new BufferedReader(new FileReader(file));
while (in.ready()) {
String s = in.readLine();
...
}
in.close();
2)使用正则表达式来评估该行是否符合您的条件
3)一次写一行/评估/写匹配行