0

このメソッドはランダムな文字を書き込む必要がありますが、何も書き込みません。私はおそらくここで愚かなことをしているのですが、私の人生ではそれを見つけることができません。

public void writeRandomChunk(String fileName) {
    try {
        File saveFile = new File(folderName + '/' + fileName);

        PrintWriter writer = new PrintWriter(
                             new BufferedWriter(
                             new FileWriter(saveFile)));

        Random r = new Random(System.currentTimeMillis());

        for (int i = 0; i < chunkSize; i++) {
            for (int j = 0; j < chunkSize; j++) {
                writer.print((char)(r.nextInt(26) + 'a'));
            }
            writer.println();
        }

    } catch (Exception e) {
        System.out.println("Error in WorldFile writeRandomFile:\n"
                           + e.getLocalizedMessage());
    }
}
4

4 に答える 4

4

他のストリームと同様に (これはほとんどの言語に当てはまります)、終了したら閉じる必要があります。

ストリームは高速になるように最適化されているため、ストリームに書き込んだすべてのデータがすぐにファイルに表示されるわけではありません。あなたclose()またはflush()ストリームの場合、データはファイル(または使用している他のストレージメカニズム)に書き込まれます。

あなたの場合は、代わりに次のことを試してください。

public void writeRandomChunk(String fileName) {
    PrintWriter writer = null;
    try {
        File saveFile = new File(folderName + '/' + fileName);
        writer = new PrintWriter(
                             new BufferedWriter(
                             new FileWriter(saveFile)));

        Random r = new Random(System.currentTimeMillis());

        for (int i = 0; i < chunkSize; i++) {
            for (int j = 0; j < chunkSize; j++) {
                writer.print((char)(r.nextInt(26) + 'a'));
            }
            writer.println();
        }

    } catch (Exception e) {
        System.out.println("Error in WorldFile writeRandomFile:\n"
                           + e.getLocalizedMessage());
    } finally {
        if (writer != null)
            writer.close();
    }
}
于 2012-05-22T04:07:56.673 に答える
1

ある時点でファイルを flush() および/または close() する必要があります。

于 2012-05-22T04:08:04.113 に答える
0

ライターを閉じていないので、最後に試してみてください。

finally  {
  writer.close();
}
于 2012-05-22T04:12:50.523 に答える
0

常にストリームを閉じる必要があります。ライターでこのパターンを試してください:

PrinterWriter writer = null;
try {
    writer = new PrinterWriter(...);
    // do your write loop here.
} catch (Exception e) {
    // recover from exception.
} finally {
    if (writer != null) {
        writer.close();
    }
}
于 2012-05-22T04:17:46.133 に答える