【问题标题】:For-loop not executing File writing commandsFor-loop 不执行文件写入命令
【发布时间】:2014-11-11 14:03:02
【问题描述】:

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

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

我已经得到它写chars 到文件:

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

我将得到输出“Total: (number) characterswritten to (whatever).txt!”但它实际上不会写字符。但是,如果我使循环无限(通过将qu++ 更改为qu--),它将写入字符,当然只有一个文件。我什至尝试将其更改为while 循环,但没有成功。有什么想法吗?

【问题讨论】:

    标签: java for-loop io printwriter bufferedoutputstream


    【解决方案1】:

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

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

    【讨论】:

    • 我觉得没有必要关闭它,因为它应该一直持续下去,但我确实忘记了刷新,我注意到我在 while 循环中定义了它并且应该关闭它。那是我的问题。谢谢!
    【解决方案2】:

    你应该使用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();
    

    【讨论】:

    • 虽然可行,但建议在将字符数据写入文件时使用 FileWriter 而不是 OutputStreamWriter,因为它会自动设置字符编码。不过,关于将其包装在 BufferedWriter 中的好技巧!忘了原始 FileWriter 没有被缓冲...
    猜你喜欢
    • 2015-02-27
    • 1970-01-01
    • 2020-10-29
    • 2016-01-31
    • 2019-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-02
    相关资源
    最近更新 更多