Мертвый простой, но длительный Java PrintWriter проблема
-
08-10-2019 - |
Вопрос
Проблема в том, что он находит ключевое слово «Dodge» создает файл, но не пишет ему. У меня была эта проблема раньше, и я промыв, затем закрывая файл исправил его, но это не сработало на этот раз.
Также WriteToFile(CurrentLine[ReturnWordsIndex("using")-1]);
к нижнему ошибкам и говорит ArrayIndexOutOfBoundsException: -2
Я не уверен, почему, потому что «использование» никогда не следует найден в положении -1.
import java.io.*;
import javax.swing.JOptionPane;
public class InputLog {
private BufferedReader CombatLog;
private PrintWriter CharacterFile;
private String[] CurrentLine;
InputLog(){
try{
CombatLog = new BufferedReader(new FileReader("127401175162_chatlog.txt"));
do{
try{
CurrentLine = CombatLog.readLine().split(" ");
}
catch(IOException e){
JOptionPane.showMessageDialog(null, "Sorry cannot open UserSettings File");
}
DetermineType();
}while(CombatLog.ready());
CharacterFile.close();
}
catch(IOException e){
JOptionPane.showMessageDialog(null, "Could not open next line of combatlog " + e);
}
}
public void WriteToFile(String S){
try{
CharacterFile = new PrintWriter(new File(CurrentLine[3]));
}
catch(IOException e){
JOptionPane.showMessageDialog(null, "Sorry can't write " + CurrentLine[3] +" To file");
}
CharacterFile.flush();
CharacterFile.print(S+ " ");
}
public void WriteToFileLn(String S){
try{
CharacterFile = new PrintWriter(new File(CurrentLine[3]));
}
catch(IOException e){
JOptionPane.showMessageDialog(null, "Sorry can't write " + CurrentLine[3] +" To file");
}
CharacterFile.flush();
CharacterFile.println(S+ " ");
}
public int ReturnWordsIndex(String S){
for(int i=0;i<CurrentLine.length;i++){
if(CurrentLine[i].equals(S))
return i;
}
return -1;
}
private void DetermineType(){
for(String A: CurrentLine)
if(A.equals("attacks")){
JOptionPane.showMessageDialog(null, "found dodge");
WriteToFile(CurrentLine[2]);
WriteToFile(CurrentLine[ReturnWordsIndex("using")-1]);
WriteToFile("(dodge).");
WriteToFileLn(CurrentLine[ReturnWordsIndex("attacks")-1]);
}
}
public static void main(String args[]){
new InputLog();
}
}
Спасибо, Масаир
Редактировать: Я обнаружил, что я просто пишу одну строку, создавая новый файл, затем запись другого символа. Как я могу не удалить файл и просто переписать ему?
Решение
Как я могу не удалить файл и просто переписать ему?
Я предполагаю, что вы имеете в виду присоединиться к к этому. (То, что вы в настоящее время делаете, переписывают его.)
Если это так, просто используйте FileWriter(file, true)
создать а Writer
которые начнут писать на текущем конце файла; например
CharacterFile = new PrintWriter(new FileWriter(new File(CurrentLine[3])));
Примечание. Плохой стиль для переменной или имени метода Java начинается с заглавной буквы.
Другие советы
WriteToFile(CurrentLine[ReturnWordsIndex("using")-1]);
вызывает ан ArrayIndexOutOfBoundsException: -2
потому что слово «использование» не найдено (так ReturnWordsIndex("using")
Возвращает -1).
Вам нужно сообщение, если вы не пытаетесь индексировать CurrentLine
Если слово не было найдено.
В ответ на ваше редактирование откройте файл за пределами WriteToFile
а также WriteToFileLn
Функции.