java - 使用我的 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)```
解决方案
尝试在您的 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++;
}
}
推荐阅读
- docker - 在不使用 imagepullsecret 的情况下使用 kubernetes-helm 应用程序拉取私有注册表映像
- typo3 - 如何通过 TypoScript 配置类别列表(TYPO3 新闻扩展)
- python - 为什么我可以使用 True 或 False 作为列表的索引?
- ruby-on-rails - 如果用户尝试在输入字段中输入的字符数超过 maxlength,如何显示错误消息?
- javascript - Scoll 到顶部点击
- swift - 如何删除 arView.session.currentFrame 的锚点?
- java - 即使应用程序关闭,也让文件观察器在后台运行
- python - Python Cerberus 在模式中嵌入数字配置数据
- java - How to write Java Array string to Json File
- css - 如何为内容创建带有箭头和分隔符的 div,以便它们使用 react 和 css 对齐?