For循环不执行文件写入命令

时间:2014-11-11 14:03:02

标签: java for-loop io printwriter bufferedoutputstream

我有一个程序应该生成一个随机整数名称的文件,并为每个文件追加200个字符的数据。我已经成功地创建了一个文件:

BufferedOutputStream bos = new BufferedOutputStream(Files.newOutputStream(
         new File("C:/Users/mirvine/Desktop/SPAM").toPath()));

我已经将char写入文件:

bos.write((char)rand.nextInt(255));

但是当我将两者结合使用for循环时,它不起作用:

try {
            while(true) {
                int i = rand.nextInt();
                File outputFile = new File("C:/Users/mirvine/Desktop/SPAM/"+ String.valueOf(i) +".txt");

                    bos = new BufferedOutputStream(Files.newOutputStream(outputFile.toPath()));
                    PrintWriter writer = new PrintWriter(bos);
                    for(int qu = 0; qu <= 2000; qu++) {
                        writer.write((char)rand.nextInt(255));
                        System.out.println("Total " + String.valueOf(qu) + " characters written to " + String.valueOf(i) + ".txt!");
                }
                    System.out.println("File named \'" + String.valueOf(i) + ".txt\' created!");

            }
        } catch (Exception e) {e.printStackTrace(); return;}

我将得到输出&#34;总计:(数字)字符写入(无论如何).txt!&#34;但它实际上不会写字符。但是,如果我使循环无限(通过将qu++更改为qu--),它将写入字符,当然只有一个文件。我甚至尝试将其更改为while循环,但它无法正常工作。有什么想法吗?

2 个答案:

答案 0 :(得分:1)

考虑更改BufferedOutputStreamPrintWriterFileWriter的使用,它会将您的文件作为构造函数的参数。

此外,请确保在完成后刷新并关闭流。

答案 1 :(得分:0)

你应该使用BufferedWriter,它更有效率,不要忘记在最后关闭它。无限循环是没用的。

int i = rand.nextInt();
File outputFile = new File("C:/Users/mirvine/Desktop/SPAM/"+ String.valueOf(i) +".txt");
FileOutputStream fos = new FileOutputStream(outputFile);
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(fos));  
for(int qu = 0; qu <= 2000; qu++)
{
    bw.write((char)rand.nextInt(255));
    System.out.println("Total " + String.valueOf(qu) + " characters written to " + String.valueOf(i) + ".txt!");
}
bw.close();