Ошибка при сохранении и записи текстовых файлов, когда программа находится в банке

Здравствуйте, я делаю аддон для bukkit программы для модификации сервера minecraft. Эта программа требует, чтобы я поместил банку в папку с текстовым документом дополнения, чтобы обеспечить местоположение классов в любом случае. Затем он использует мой класс и преобразует его в класс в класс, от которого ему требуется наследовать мой класс. Я пытаюсь написать текстовый файл в том же каталоге, что и моя программа, поэтому я написал это (это для денежной программы) (playerName - это праматер, я использовал его в качестве имени файла, потому что это игрок, для которого вы сохраняете баланс)

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 ответ

Это самая странная вещь, которую я видел долго:

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();
}
Другие вопросы по тегам