2010-12-05 3 views
1

Проблема заключается в том, что ключевое слово «dodge» создает файл, но не записывает его. Раньше у меня была эта проблема, и я покраснел, закрыв файл, исправил ее, но на этот раз это не сработало.Dead Простая, но длительная проблема Java PrintWriter

Также 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(); 
    } 
} 

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

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

ответ

0

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

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

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

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

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

0

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

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

+0

А я вижу, спасибо. По какой-то причине из-за того, что я пишу в файл с помощью PrintWriter, я получил небольшую часть, небольшую часть, информации. – Malaken 2010-12-05 19:34:00

0

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