文件在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。是的,非常有用!这是我的意图,但我想我把阅读脚本放错了位置。是的,非常有用!这是我的意图,但我想我把阅读脚本放错地方了。