java - 文件在 Java 中无法正常工作

标签 java file

所以,问题来了。我正在制作一款游戏,但在保存进度的文件保存类方面遇到了问题。它能够加载文件中的默认值来创建新游戏,然后重新启动游戏以使更改生效。问题是,默认值被保存,但游戏不再识别它们。然后,当我手动删除该文件时,使用相同的方法重新创建该文件,然后游戏会识别它。这是我使用的类:

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import mario.simulator.MarioSimulator;

/**
 *
 * @author Jaca
 */
public class filer {
    private static File f;
    private static BufferedReader br;
    private static BufferedWriter bw;
    private boolean docterlicense;
    private boolean driverlicense;
    private boolean policelicense;
    private boolean finishedschool;
    private boolean bullied;
    private boolean messedtubby;
    private boolean toadmode;
    private long candy;
    private long coin;
    private long spaghetti;
    private long cake;
    private long water;
    private long mushroom;
    private long bomb;
    private long gun;
    private int hunger;
    private long respawn;
    private long swag;
    private long awesome;

public filer(){
    f = new File("resource\\config\\save.sav");
    if(!f.exists()){
        try {
            f.createNewFile();
            filer.reset();
            br = new BufferedReader(new FileReader(f));
            docterlicense = Boolean.parseBoolean(br.readLine());
            policelicense = Boolean.parseBoolean(br.readLine());
            finishedschool = Boolean.parseBoolean(br.readLine());
            driverlicense = Boolean.parseBoolean(br.readLine());
            bullied = Boolean.parseBoolean(br.readLine());
            messedtubby = Boolean.parseBoolean(br.readLine());
            toadmode = Boolean.parseBoolean(br.readLine());
            candy = Long.parseLong(br.readLine());
            coin = Long.parseLong(br.readLine());
            spaghetti = Long.parseLong(br.readLine());
            cake = Long.parseLong(br.readLine());
            water = Long.parseLong(br.readLine());
            mushroom = Long.parseLong(br.readLine());
            bomb = Long.parseLong(br.readLine());
            gun = Long.parseLong(br.readLine());
            hunger = Integer.parseInt(br.readLine());
            respawn = Long.parseLong(br.readLine());
            swag = Long.parseLong(br.readLine());
            awesome = Long.parseLong(br.readLine());
            MarioSimulator.loadSave(docterlicense, policelicense, finishedschool, driverlicense, bullied, messedtubby, toadmode,  candy, coin, spaghetti, cake, water, mushroom, bomb, gun, hunger, respawn, swag, awesome);
        } catch (IOException ex) {
            Logger.getLogger(filer.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
}

public static void reset(){
    try {
        bw = new BufferedWriter(new FileWriter(f));
        bw.write("false");
        bw.newLine();
        bw.write("false");
        bw.newLine();
        bw.write("false");
        bw.newLine();
        bw.write("false");
        bw.newLine();
        bw.write("false");
        bw.newLine();
        bw.write("false");
        bw.newLine();
        bw.write("false");
        bw.newLine();
        bw.write("0");
        bw.newLine();
        bw.write("0");
        bw.newLine();
        bw.write("0");
        bw.newLine();
        bw.write("0");
        bw.newLine();
        bw.write("0");
        bw.newLine();
        bw.write("0");
        bw.newLine();
        bw.write("0");
        bw.newLine();
        bw.write("0");
        bw.newLine();
        bw.write("100");
        bw.newLine();
        bw.write("0");
        bw.newLine();
        bw.write("0");
        bw.newLine();
        bw.write("0");
        bw.flush();
        bw.close();
    } catch (IOException ex) {
        Logger.getLogger(filer.class.getName()).log(Level.SEVERE, null, ex);
    }
}
}

任何帮助都是有帮助的。

最佳答案

基本上,您将忽略保存文件(如果存在)...

f = new File("resource\\config\\save.sav");
if(!f.exists()){
    //...
} // And then what??

相反,您应该重置该文件,然后加载它...

f = new File("resource\\config\\save.sav");
if(!f.exists()){
    filer.reset();
}
try (BufferedReader br = new BufferedReader(new FileReader(f))) {
    // Load the file...
} catch (IOException ex) {
    Logger.getLogger(filer.class.getName()).log(Level.SEVERE, null, ex);
}

确保您正在管理您的读者并尽最大努力确保它们适当关闭,请记住,如果您创建,则应该关闭它。

如果您使用的是 Java 7+,则可以使用 try-with-resources如上所述,否则您应该有一个 finally 子句来关闭您可能已打开的资源(每个子句可能需要自己的 try-catch)

关于java - 文件在 Java 中无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24299286/

相关文章:

python - 在Python中写入文件时如何打印 "dots"(或其他类型的反馈)?

java - 将 Realm 变量从其他类传递到适配器中的 getView

java - 找不到类 'android.graphics.drawable.RippleDrawable' Unicode 问题?

java - 字符串 ("2013-4-25") 到日期的转换

c# - File.Exists(file) 为假但文件存在

javascript - 如何将文件上传限制为仅 .xlsx 和 .docx 文件

java - EditText to double Android studio,这似乎有效但看起来不正确

java - 在调试工具 Netbeans 中单击 "stop"按钮时,多线程 java 应用程序输出了一个奇怪的结果

java - 从 Java 中的文件中读取行

c - 在 C 中使用 fscanf 扫描字符串