gpt4 book ai didi

java - IOException:读取错误

转载 作者:行者123 更新时间:2023-12-01 19:18:10 24 4
gpt4 key购买 nike

如果您想了解有关该错误的更多信息,可以下载完整源代码 here

嘿,我正在使用 java.util.Properties 读取 ini 文件;我遇到了一个奇怪的问题。当我尝试加载特定文件时,它会抛出这个奇怪的异常,我已经尝试了大约一天来消除该异常。

java.io.IOException: Read error
at java.io.FileInputStream.readBytes(Native Method)
at java.io.FileInputStream.read(Unknown Source)
at java.util.Properties$LineReader.readLine(Unknown Source)
at java.util.Properties.load0(Unknown Source)
at java.util.Properties.load(Unknown Source)
at IniReader.load(IniReader.java:20)
at plane.<init>(plane.java:22)
at renderingArea.<init>(flight_optimizer.java:93)
at flight_optimizer_GUI.<init>(flight_optimizer.java:159)
at flight_optimizer.main(flight_optimizer.java:46)

我之前一直很好地阅读这个文件,没有任何问题,然后我改变了一些调用方式,并且不得不在底部添加一行。如果我删除该行,则不会出现问题。

txt 文件是:

x=0
y=0
max_velocity=.1
passengers=100
num_planes=1

如果我删除 num_planes=1 行,则文件可以正常读取。

相关代码:

import java.util.Enumeration;

public class IniReader {

//global vars

public IniReader(){
// initializeing stuffs
}

public void load(InputStream inStream) throws IOException {
this.inStream = inStream;
this.properties.load(this.inStream);
this.keys = this.properties.propertyNames();
inStream.close();
}
}

class renderingArea extends JPanel {

//Global vars
private IniReader ini;

public renderingArea(){
super();
// Initializing some things
files = new fileManager();
ini = new IniReader();

FileInputStream planeStream;
FileInputStream cityStream;
try {
planeStream = files.getIni("plane.ini");
ini.load(planeStream);

//extraneous code

} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e1) {
e1.printStackTrace();
} catch (NumberFormatException e1) {
e1.printStackTrace();
}
}

//moar extraneous code

}

最佳答案

这就是为什么:

您的代码(flight_optimizer.java,第 82 行及更多):

FileInputStream planeStream;
...
planeStream = files.getIni("plane.ini");
ini.load(planeStream);
...
for( int i=0; i<planes.length; i++ ){
planes[i] = new plane(planeStream);
}

第二行和每个循环迭代都将我们引导到这里(IniReader.java,第 17 行):

public void load(InputStream inStream) throws IOException {
this.inStream = inStream;
this.properties.load(this.inStream);
this.keys = this.properties.propertyNames();
inStream.close();
}

您试图多次使用同一个InputStream,而且,您试图在它已经关闭后使用它。您将需要重新创建流,或者最好读取一次配置并多次使用它。

顺便说一句,在 Java 中使用流的推荐方法如下:

InputStream is = ...;
try {
// Reading from the stream
} finally {
is.close();
}

这将确保与流关联的系统资源始终被释放。

关于java - IOException:读取错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5684250/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com