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