文件在Java中无法正常工作

文件在Java中无法正常工作,java,file,Java,File,所以,问题来了。我正在制作一个游戏,我在保存进度的文件保存类中遇到了问题。它可以加载文件中的默认值来创建新游戏,然后重新启动游戏,以便更改生效。问题是,默认值已保存,但游戏不再识别它们。然后,当我手动删除该文件时,使用相同的方法重新创建该文件,然后游戏识别它。以下是我使用的类: import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileReader;

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

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+,您可以如上所示使用,否则您应该有一个
finally
子句,该子句将关闭您可能打开的资源(每个资源可能都需要自己的
try catch

基本上,如果存在保存文件,您将忽略它

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+,您可以如上所示使用,否则您应该有一个
finally
子句,该子句将关闭您可能打开的资源(每个资源可能都需要自己的
try catch

我知道我做了什么。程序仅在文件不存在时读取该文件!那只是我没有注意我的代码。也许,如果我能更好地组织一切,调试会更容易,如下所示:

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()){ //creates the file if it does not exist
            try {
                f.createNewFile();
                filer.reset(); //loads default values to new file
            } catch (IOException ex) {
                Logger.getLogger(filer.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
        this.read(); //reads the file
    }

    public void read(){ //reads the file, then passes variables to game thread
        try {
            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(){ //loads defaults values
        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);
        }
    }
}

令人惊讶的是,代码中的一个小错误会严重地扰乱程序。对于那些程序员来说,在无意中浪费别人的时间之前,要彻底检查你的代码,就像我刚才做的那样。对不起,各位

我知道我做了什么。程序仅在文件不存在时读取该文件!那只是我没有注意我的代码。也许,如果我能更好地组织一切,调试会更容易,如下所示:

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()){ //creates the file if it does not exist
            try {
                f.createNewFile();
                filer.reset(); //loads default values to new file
            } catch (IOException ex) {
                Logger.getLogger(filer.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
        this.read(); //reads the file
    }

    public void read(){ //reads the file, then passes variables to game thread
        try {
            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(){ //loads defaults values
        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);
        }
    }
}

令人惊讶的是,代码中的一个小错误会严重地扰乱程序。对于那些程序员来说,在无意中浪费别人的时间之前,要彻底检查你的代码,就像我刚才做的那样。对不起,各位

你所说的“游戏不再识别它们”是什么意思?如果文件存在,你的构造函数不会做任何事情。我相当确信
file
在Java中工作正常。至于你的程序,我也相信它不能正常工作。最后,需要帮助-使用。你说的“游戏不再识别它们”是什么意思?如果文件存在,你的构造函数不会做任何事情。我非常确信
文件
在Java中工作正常。至于你的程序,我也相信它不能正常工作。最后,要寻求帮助,请使用a。是的,非常有用!这是我的意图,但我想我把阅读脚本放错了位置。是的,非常有用!这是我的意图,但我想我把阅读脚本放错地方了。