Мертвый простой, но длительный Java PrintWriter проблема

StackOverflow https://stackoverflow.com/questions/4360588

  •  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 Функции.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top