我需要根据条件将一行从一个文件复制到另一个文件 这是我的代码
import org.apache.commons.io.FileUtils;
public class FileCopy {
public static void main(String args[]) throws IOException {
File source = \\
File fileToCopyFrom \\
File target :\\
if (!target.exists()) {
target.createNewFile();
}
PrintStream fstream =new PrintStream(target);
BufferedReader brSource = new BufferedReader(new FileReader(source));
BufferedReader brFileToCopyFrom = new BufferedReader(new FileReader(fileToCopyFrom));
String lineSource;
String lineToCopy;
while((lineSource = brSource.readLine()) != null) {
while ((lineToCopy=brFileToCopyFrom.readLine())!=null) {
if (lineToCopy.contains(lineSource.substring(lineSource.indexOf("_")+1, lineSource.indexOf(".")-1)))
fstream.println(lineToCopy);
}
}
}}
但它只复制第一行 错误在哪里?
答案 0 :(得分:1)
我建议使用commons-io.jar
。在这个FileUtils
类中进行File
操作的许多方法,如复制,移动和删除。
修改强>
如果包含break
。
while ((lineSource = brSource.readLine()) != null) {
while ((lineToCopy = brFileToCopyFrom.readLine()) != null) {
if (lineToCopy.contains(lineSource.substring(
lineSource.indexOf("_") + 1,
lineSource.indexOf(".") - 1))) {
fstream.println(lineToCopy);
break;
}
}
}
答案 1 :(得分:1)
只复制第一个,因为在第一个while
的第二次迭代中,brFileToCopyFrom
到达文件末尾。
您需要在第一个BufferedReader brFileToCopy
内打开while
(示例1)或使用mark/reset
功能(示例2)。
示例1:
while ((lineSource = brSource.readLine()) != null) {
BufferedReader brFileToCopyFrom = new BufferedReader(new FileReader(fileToCopyFrom));
while ((lineToCopy = brFileToCopyFrom.readLine()) != null) {
...
}
}
}
示例2:
brFileToCopyFrom.mark(1024); // number of characters to be read while preserving the mark
while ((lineSource = brSource.readLine()) != null) {
brFileToCopyFrom.reset();
while ((lineToCopy = brFileToCopyFrom.readLine()) != null) {
...
}
}
}
答案 2 :(得分:0)
你创建你的流,你读取你的流中的所有条目,第一行,但是当你想要为第二行执行此操作时,brFileToCopyFrom是空的(当你检查第一行时,你已经从中获取了所有内容。
所以你可以做的就是将你的brFileToCopyFrom
创建到循环中,
while((lineSource = brSource.readLine()) != null) {
BufferedReader brFileToCopyFrom = new BufferedReader(new FileReader(fileToCopyFrom));
...
应该有效