1

この本当に迷惑なエラーが発生しています。私は何日もそれに取り組んできましたが、極端な量の研究も成功していません. 基本的に、コードが行っていることは、ファイルを読み取ることですが、読み取り後にテキストを削除するようです。そして、特定の行のみ。これは私の Reader メソッドです:

synchronized public static String getValue(String path, String filename, Boolean useColors, String folder){
    try{
        while(!TxtWriter.isResting());
        FileRequest req =  writer.getRelitive(filename, path);
        if(req==null){
            File f = new File(Conquest.FilePaths+"/"+folder, filename);
            if(!f.getParentFile().exists())f.getParentFile().mkdirs();
            if(f.exists()){
                BufferedReader in = new BufferedReader(new FileReader(f));
                String a;
                while((a=in.readLine())!=null){
                    if(a.startsWith("'"+path+"'"+":")){
                        in.close();
                        a=a.substring(path.length()+3);
                        if(useColors)a=colorCoder(a);
                        return a;
                    }
                }
                in.close();
            }else TxtWriter.createFile(filename, folder);
        }else return ((useColors)?colorCoder(req.getMessage()):req.getMessage());
    }catch(Exception e){
        System.err.println("[Conquest/TxtReader] Error reading file "+filename+"!");
        e.printStackTrace();
    }
    return null;
}

これは、読み取る前のファイルです。

'Kingdom':Devonel

'Flags':Leader

メソッドを呼び出します

public String getPlayerKingdom(String p){
    String in = TxtReader.getValue("Kingdom", p+".txt", false, "Citizens");
    return ((in==null)?in:"None");
}

「なし」が返され、ファイルには だけが'Flags':Leader含まれ、他には何もありません。

私を本当に困惑させ、特定の方法は機能しますが、他の方法は機能しません。それらがまったく同じコードであっても、文字列が異なります。ここにあるこのメソッドは同じものですが、想定どおりに機能します。

public int getResource(String kingdom, String name){
    String out = TxtReader.getValue("R-" + name, kingdom + ".txt", false, "Kingdoms");
    if(out==null)return 0;
    return Integer.valueOf(out);
}

誰かが助けてくれたら、私は感謝します。:)

4

1 に答える 1

3

この行は間違っているように見えます:

return ((in==null)?in:"None");

逆であってはいけませんか?

return ((in==null)?"None":in);

まさにこの理由から、私は三項演算子構造のファンではありません。if/else ブロックを使用して、何をしているのかを明確にしてください。

また、BufferedReader はファイルから情報を削除しません。限目。情報を読み取るだけで、他には何もありません。行が削除されている場合は、プログラムに別のバグがある可能性があります。これは、表示されていないコードに原因がある可能性があります。

しかし、エラーの原因に関係なく、コードは非常に非効率的でエラーが発生しやすいように見えます。一致を確認する必要があるたびにファイルを再読み込みしようとするのはなぜですか? 単純にファイルを 1 回読み取ってから、情報をHashMap<String, String>.

于 2012-08-20T02:35:07.797 に答える