所以,问题出在这里:我正在开发一个从.csv文件读取的Java程序,并从中构造对象。我正在使用InputStream,InputStreamReader和BufferedReader来读取文件。我正在使用的IDE是NetBeans,正在读取的文件位于src目录中。快速说明,为方便起见,我对文件名进行了硬编码,以便您了解它是如何被实际读取的。在我的实际程序中,文件名作为方法的参数传入。无论如何,它似乎在IDE中工作正常。但是当我创建一个JAR时,它并没有按照我的意愿去做。
public void readFile(filename) throws IOException, FileNotFoundException {
is = getClass().getResourceAsStream("file.csv");
isr = new InputStreamReader(is);
//fr = new FileReader(filename);
br = new BufferedReader(isr);
String info;
while ((info = br.readLine()) != null)
{
String[] tokens = info.split(",");
Object object = new Object();
object.setProperty(tokens[0]);
object.setAnotherProperty(tokens[1]);
object.setSomeOtherProperty(tokens[2]);
}
}
catch (FileNotFoundException f)
{
f.getMessage();
}
catch (IOException ioe)
{
ioe.getMessage();
}
catch (ArrayIndexOutOfBoundsException oob)
{
//;
}
catch (NullPointerException npe)
{
//;
}
finally
{
br.close();
isr.close();
is.close();
}
我更新文件的方法看起来像这样(再次,文件名已被硬编码,以便您可以更好地了解正在发生的事情):
public void updateRoom(String filename, String property1, string property2, string property3) throws FileNotFoundException
{
for (Objects o : objects)
{
if (o.getProperty().equals(property1))
{
o.setProperty(property1);
o.setAnotherProperty(property2);
o.setSomeOtherProperty(property3);
}
}
File file = new File("file.csv");
PrintWriter pr = new PrintWriter(file);
for (Object o : objects)
{
pr.println(o.getProperty() + "," +
o.getAnotherProperty() + "," +
o.getSomeOtherProperty())
}
pr.close();
}
问题是.JAR在运行时读取文件,但它不是写入SAME文件,而是创建一个新文件并写入该文件。这是一个问题,因为每次我再次运行程序时,属性和值都保持不变。它不是从新创建的文件中读取的。它仍在从原始文件中读取,但它正在写入新文件。
我想读取和写入同一个文件。这样,如果我关闭程序并再次运行它,它将已经加载了新的属性/值。