程序在jar中时保存和写入文本文件时出错

时间:2013-09-04 17:58:13

标签: java io minecraft

您好我正在为bukkit制作一个我的工作服务器modding程序的插件。这个程序要求我将一个罐子放入带有插件文本文档的foulder中,无论如何都要提供类位置。然后它使用我的类并将它转换为类,它需要我的类继承。我正在尝试在与我的程序相同的目录中写一个文本文件,所以我写了这个(这是一个钱程序)(playerName是一个pramater我用它作为文件名,因为它是你保持平衡的玩家)< / p>

try{
    FileWriter fstream = new FileWriter(new File(".").getAbsolutePath()+File.separator+playerName + ".txt",true);
    getLogger().log(Level.INFO,"trying to save text document to " + new File("").getAbsolutePath()+File.separator+playerName + ".tct");
    writer = new BufferedWriter(fstream);
    writer.write("30");
    return 30;
}
catch(Exception err){
     getLogger().log(Level.INFO, "Exception occoured!{0}", err.getMessage());
     return -1;
}

当我尝试使用此代码读取它时会抛出异常

BufferedReader reader = new BufferedReader(new FileReader(new File(".").getAbsolutePath()+"/"+playerName));
Integer i = Integer.getInteger(reader.readLine());
return i.intValue();

此外,我找不到它所写的文本文件。有什么建议? 此外,我想尝试将其保存回文件,因此它不会保存在.jar文件中,但我不知道该怎么做。 还有可能将文件保存在正在使用该类的程序的文件夹中吗?谢谢XD

1 个答案:

答案 0 :(得分:0)

这是我见过的最奇怪的事情:

FileWriter fstream = new FileWriter(new File(".").getAbsolutePath()+File.separator+playerName + ".txt",true);
getLogger().log(Level.INFO,"trying to save text document to " + new File("").getAbsolutePath()+File.separator+playerName + ".tct");

尝试清理:

File f=new File(playerName + ".txt");
FileWriter fstream = new FileWriter(f, true);
getLogger().log(Level.INFO,"trying to save text document to " + f.getAbsolutePath());

接下来的事情:在使用之后你应该总是关闭文件。

然后你的文件名不匹配。有一次,playername+".txt"下次只有playername

但最大的错误是:

Integer i = Integer.getInteger(reader.readLine());
return i.intValue();

Integer.getInteger 解析字符串。它将查找该名称的系统属性(您将没有名为"30"的系统属性)并将其解释为整数(如果存在)。在您的情况下,它会返回null,因此您在调用NullPointerException时会得到intValue。请改用Integer.parseInt

try(BufferedReader reader = new BufferedReader(new FileReader(playerName+".txt"))) {
  Integer i = Integer.parseInt(reader.readLine());
  return i.intValue();
}