问题是它找到关键词“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();
}
}
谢谢,马赛尔
编辑:我发现我只是写一个字符串,创建一个新文件,然后写另一个字符。我怎么能不删除文件,只是重写它?
答案 0 :(得分:0)
WriteToFile(CurrentLine[ReturnWordsIndex("using")-1]);
会导致ArrayIndexOutOfBoundsException: -2
,因为找不到“使用”这个词(因此ReturnWordsIndex("using")
会返回-1)。
您需要一个if / then语句,以便在找不到该单词时不要尝试索引CurrentLine
。
答案 1 :(得分:0)
为了响应您的修改,请在WriteToFile
和WriteToFileLn
函数之外打开文件。
答案 2 :(得分:0)
我怎么能不删除文件,只是重写它?
我认为你的意思是追加。 (你目前正在做的是重写它。)
如果是这样,只需使用FileWriter(file, true)
创建一个Writer
,它将开始在文件的当前末尾写入; e.g。
CharacterFile = new PrintWriter(new FileWriter(new File(CurrentLine[3])));
注意:Java变量或方法名称以大写字母开头是不好的样式。