Dead Простая, но длительная проблема Java PrintWriter - PullRequest
1 голос
/ 05 декабря 2010

Проблема в том, что он находит ключевое слово "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();
    }
}

Спасибо, Макер

Редактировать: я обнаружил, что я просто пишу одну строку, создаю новый файл, а затем пишу другой символ. Как мне не удалить файл, а просто переписать в него?

Ответы [ 3 ]

0 голосов
/ 06 декабря 2010

В ответ на ваши изменения откройте файл вне функций WriteToFile и WriteToFileLn.

0 голосов
/ 06 декабря 2010

Как я могу не удалить файл, а просто переписать его?

Я предполагаю, что вы имеете в виду добавление к нему.(То, что вы сейчас делаете, переписываете его.)

Если это так, просто используйте FileWriter(file, true), чтобы создать Writer, который начнет запись с текущего конца файла;например,

CharacterFile = new PrintWriter(new FileWriter(new File(CurrentLine[3])));

Примечание: неверный стиль для переменной Java или имени метода начинаться с заглавной буквы.

0 голосов
/ 05 декабря 2010

WriteToFile(CurrentLine[ReturnWordsIndex("using")-1]); вызывает ArrayIndexOutOfBoundsException: -2, потому что слово "using" не найдено (поэтому ReturnWordsIndex("using") возвращает -1).

Вам нужен оператор if / then, чтобы не пытаться индексировать CurrentLine, если слово не найдено.

...