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

を使用することをお勧めします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 に答える
1

最初の 2 回目の反復でファイルの終わりに到達するため、最初の 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 に答える
0

ストリームを作成すると、最初の行でストリームからすべてのエントリを読み取りますが、2 行目でこれを実行したい場合、brFileToCopyFrom は空です (最初の行をチェックしていたときに既にすべてを取得しています。

あなたができることはbrFileToCopyFrom、ループを作成して移動することです。

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

...

それはうまくいくはずです

于 2013-04-17T10:30:39.003 に答える