【问题标题】:Dead Simple but lengthy Java PrintWriter problem简单但冗长的 Java PrintWriter 问题
【发布时间】:2010-12-05 19:05:39
【问题描述】:

问题是它发现关键字“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();
    }
}

谢谢,麦凯尔

编辑:我发现我只是在写一个字符串,创建一个新文件,然后再写另一个字符。我怎样才能不删除文件,而只是重写它?

【问题讨论】:

    标签: java file-io printwriter


    【解决方案1】:

    我怎样才能不删除文件,而只是重写它?

    我假设您的意思是 追加 到它。 (你目前正在做的是重写它。)

    如果是这样,只需使用FileWriter(file, true) 创建一个Writer,它将在文件的当前末尾开始写入;例如

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

    注意:Java 变量或方法名称以大写字母开头是不好的风格。

    【讨论】:

      【解决方案2】:

      WriteToFile(CurrentLine[ReturnWordsIndex("using")-1]); 导致 ArrayIndexOutOfBoundsException: -2 因为找不到单词“using”(所以 ReturnWordsIndex("using") 返回 -1)。

      您需要一个 if/then 语句,这样您就不会在找不到单词时尝试索引 CurrentLine

      【讨论】:

      • 啊,我明白了,谢谢。由于某种原因,导致我希望使用 PrintWriter 将一小部分(非常小的)信息写入文件。
      【解决方案3】:

      响应您的编辑,在 WriteToFileWriteToFileLn 函数之外打开文件。

      【讨论】:

        猜你喜欢
        • 2021-08-12
        • 2021-08-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-01-23
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多