首页 > 解决方案 > 使用我的 BufferedReader 在 while 循环中发出问题

问题描述

我的script功能有点问题。

为了设置上下文,我想创建一个循环,以便它根据用户在控制台中输入的内容一点一点地修改文本文档。

我的文本文档是这样编写的,因此列出了几个“插入”条目,用户可以用他选择的文本两两替换它们。

但问题如下:String arraylistcontent仍然为空,这在逻辑上会导致第 16 行错误,因为 BufferedReader 存在问题(line由于 Strem 错误,String 系统地为空)。

我该如何解决这个问题?代码如下:

public void script() {
    while(index*5 <= array.size()) {
        List<String> content = new ArrayList<>();
        int modificater = 1;
        int position = (((index-1)*5)+4);
        
        FileInputStream fIS= new FileInputStream(file);
        BufferedReader reader = new BufferedReader(new InputStreamReader(fIS, "UTF-8"));
        String line = reader.readLine();
        
        while(line != null) {
            content.add(line);
            line = reader.readLine();
        }

        System.out.println(content.get(position - 1));
        Scanner enter = new Scanner(System.in);
        String answer = enter.nextLine();
        
        while(modificater < 3) {
            for(String str : content) {
                if(str.contains("INSERT")) {
                    str.replace("INSERT", answer);
                    modificater++;
                }
            }
        }
        
        reader.close();
        
        FileWriter writer = new FileWriter(file);
        BufferedWriter bw = new BufferedWriter(writer);
                            
        for(String str : content) {
            bw.write(str);
            bw.newLine();
        }

        writer.close();
        index++;
    }
}

这是我遇到的一个错误:

Exception in thread "main" java.io.IOException: Stream closed
    at java.base/sun.nio.cs.StreamEncoder.ensureOpen(StreamEncoder.java:51)
    at java.base/sun.nio.cs.StreamEncoder.write(StreamEncoder.java:124)
    at java.base/java.io.OutputStreamWriter.write(OutputStreamWriter.java:208)
    at java.base/java.io.BufferedWriter.flushBuffer(BufferedWriter.java:120)
    at java.base/java.io.BufferedWriter.close(BufferedWriter.java:268)```

标签: java

解决方案


尝试在您的 writer.close() 下方更改您的阅读器并关闭您的 bw。

public void script() {
while(index*5 <= array.size()) {
    List<String> content = new ArrayList<>();
    int modificater = 1;
    int position = (((index-1)*5)+4);
    
    FileInputStream fIS= new FileInputStream(file);
    BufferedReader reader = new BufferedReader(new InputStreamReader(fIS, "UTF-8"));
    String line = reader.readLine();
    
    while(line != null) {
        content.add(line);
        line = reader.readLine();
    }

    System.out.println(content.get(position - 1));
    Scanner enter = new Scanner(System.in);
    String answer = enter.nextLine();
    
    while(modificater < 3) {
        for(String str : content) {
            if(str.contains("INSERT")) {
                str.replace("INSERT", answer);
                modificater++;
            }
        }
    }
    
    
    
    FileWriter writer = new FileWriter(file);
    BufferedWriter bw = new BufferedWriter(writer);
                        
    for(String str : content) {
        bw.write(str);
        bw.newLine();
    }

    reader.close();
    bw.close();
    writer.close();
    index++;
}

}


推荐阅读