1

我需要根据条件将文件中的一行复制到另一个文件这是我的代码

     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);    
            }

        }
}}

但它只复制第一行错误在哪里?

4

3 回答 3

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) {
            ...
        }

    }
}
于 2013-04-17T10:28:37.913 回答
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;
                }
            }

        }
于 2013-04-17T10:17:13.467 回答
0

你创建你的流,你从你的流中读取所有条目,第一行,但是当你想为第二行做这个时,brFileToCopyFrom 是空的(当你检查你的第一行时,你已经从它拿走了所有东西。

所以你可以做的就是将你的创建移动brFileToCopyFrom到循环中,

while((lineSource = brSource.readLine()) != null) {
BufferedReader brFileToCopyFrom = new BufferedReader(new FileReader(fileToCopyFrom));

...

那应该有效

于 2013-04-17T10:30:39.003 回答