将文件中的行复制到另一个文件

时间:2013-04-17 09:57:19

标签: java file filereader

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

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

        }
}}

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

3 个答案:

答案 0 :(得分:1)

我建议使用commons-io.jar。在这个FileUtils类中进行File操作的许多方法,如复制,移动和删除。

修改

如果包含break

的conndition,请尝试使用以下内容
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));

...

应该有效