如何从一个文件复制到另一个文件,但省略某些行/ .write()使用?

时间:2014-03-16 01:40:47

标签: java file-io bufferedwriter

我尝试通过省略原始文件中的某些行来创建文件的修改版本(如果它们不符合某个要求)。我不知道如何做到这一点。当我读入文件时,我使用

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?

2 个答案:

答案 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)一次写一行/评估/写匹配行