0

file1.txt から行を読み取り、選択した数行のみを file2.txt にコピーしています。しかし、Java は、私のコードに従ってコピーする必要があるすべての行をコピーするわけではありません。下の 625 行はコピーされません。コピーする必要がある行はすべてコンソールに表示されることに注意してください。したがって、txt ファイルに問題はありません。ここで何がうまくいかないのですか?コードは以下のとおりです。

InputStream i = new FileInputStream("file1.txt");
        InputStreamReader is=new InputStreamReader(i);
        BufferedReader bsa = new BufferedReader(iq);

        FileWriter fw=new FileWriter("file2.txt");
        BufferedWriter bw=new BufferedWriter(fw);
        PrintWriter pr=new PrintWriter(bw);

        String z="";
        for(int i=0;i<3137;i++){
            z=bsa.readLine();
            for(int q=0;q<2538;q++){
                if(array1[i].equals(array2[q])==true){
                    System.out.println(z);//to see printed lines in console
                    pr.println(z);//printing to file2
                }
            }
        }
4

3 に答える 3

3

を閉じましたPrintWriterか?

pr.close();

PrintWriterディスクに書き込むバッファがいっぱいになるまでデータをバッファリングします。デフォルトのバッファ サイズは8192 文字closeで、が呼び出されるまで数百行が書き込まれないままになる可能性があります。

于 2013-03-29T23:12:02.257 に答える
2

PrintWriter使用を閉じる必要がありますpr.close();

于 2013-03-29T23:12:16.877 に答える
1

あるファイルから別のファイルにコピーするには、次のことをお勧めします。

    try (final InputStream inputStream = new FileInputStream(file1);
            final OutputStream outputStream = new FileOutputStream(file2)) {
        final byte[] buffer = new byte[1024];
        int numRead = -1;
        while ((numRead = inputStream.read(buffer)) >= 0) {
            outputStream.write(buffer, 0, numRead);
        }
    }

Java 7 の try-with-resources 構文を使用します。また、魔法の数を回避します。

を使用することもできますFileChannel。これは少し簡単です。

    try (final FileChannel source = new RandomAccessFile(file1, "r").getChannel();
            final FileChannel dest = new RandomAccessFile(file2, "rw").getChannel()) {
        source.transferTo(0, source.size(), dest);
    }
于 2013-03-29T23:18:03.217 に答える