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

标签 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?

最佳答案

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/

相关文章:

java - FileNotFoundException 问题

Java 8 : Stream a list and map to another list based on different filters

java - 使用 Java 和 MongoDB 进行参数化查询

java - 访问者模式,并非所有访问者都对接口(interface)中的所有方法都有合理的实现

exception - 在 D 中打开一个文件

java - 在用java编写时限制文件大小

java - BufferedWriter的优点

java - 如何通过 ELB 将 HTTPS 流量路由到运行 Java JHipster webApp 的 EC2 容器

c++ - 从文本文件中删除记录

linux - 在具有相似文件的目录中进行尾部操作