Java 写入文件。使用循环

标签 java string file

我有一个简单的应用程序,但它会破坏文本文件(这只是练习)我使用 Java 仅 3 天。问题是在您运行程序之前没有错误,然后它抛出异常并停止。谢谢。 这是异常(exception):

      java.io.IOException: Stream closed
    at sun.nio.cs.StreamEncoder.ensureOpen(Unknown Source)
    at sun.nio.cs.StreamEncoder.write(Unknown Source)
    at sun.nio.cs.StreamEncoder.write(Unknown Source)
    at java.io.OutputStreamWriter.write(Unknown Source)
    at java.io.Writer.write(Unknown Source)
    at test.main(test.java:18)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at 
     edu.rice.cs.drjava.model.compiler.JavacCompiler.runCommand(JavacCompiler.java:272)

这是代码。

import java.io.FileWriter;
import java.util.Random;
import java.io.IOException;
public class test {
    public static void main(String[] args) throws IOException {

        final String alphabet = "abcdefghigklmnopqrstuvwxyz";
        final int N = alphabet.length();
        Random r = new Random();

        FileWriter file = new FileWriter("hello.txt");
        String sb = " ";
        for (int i = 0; i < 1;) {
            sb += alphabet.charAt(r.nextInt(N));
            System.out.println(sb);
            int length = sb.length();
            file.write(sb);
            file.close();
            if (length == 30) {
                sb = " ";
            }
        }
    }
}

最佳答案

问题是您正在关闭 FileWriter 并尝试再次使用它。

相反,在完成循环后关闭编写器:

try (FileWriter file = new FileWriter("hello.txt")) {
  String sb = " ";
  for (int i = 0; i < 1; i++) {  // Note: added a i++
    sb += alphabet.charAt(r.nextInt(N));
    System.out.println(sb);
    int length = sb.length();
    file.write(sb);
    // file.close();   <---- NOPE: don't do this
    if (length == 30) {
      sb = " ";
    }
  }
}

感谢Andrew用于发现 i++ 遗漏。

关于Java 写入文件。使用循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18380558/

相关文章:

java - 如何使用java仅保存zip文件并删除其他文件夹?

java - 多个小型 Java 数据库事务或一个大型 Java 数据库事务?哪个更快?

java - 如何以网络模式启动GWT?

c - 当字符串的长度大于 n 时,如何打印字符串的前 n 个字节?

c - 二维指针数组到二维数组

c - 从C中的文件读取

c - 当我使用 fgetc 时尾随\n

java - 将文件写入随机不连续的硬盘位置

java - 并发请求的 repo 类线程安全吗? - Spring Boot

c - 在 C 中将字符串转换为 long long 时出现问题