所以我正在尝试使用扫描仪读取文件,但是,文件的所有内容都被擦除,然后它什么也没读。以下是我在Main方法中连续运行的方法:
private static Scanner x;
private static Formatter y;
public void openMainFile(String name){
try{
x = new Scanner(new File("main.mcmm");
y = new Formatter("main.mcmm");
}catch(Exception e){
GUI.error(2);
}
}
此方法运行完全正常
public void readModMainFile(){
while(x.hasNext()){
Main.name = x.next();
Main.ver = x.nextFloat();
Main.base = x.nextBoolean();
Main.dev = x.next();
Main.date = x.next();
}
}
运行此方法后,文件为空,“Main.-”变量没有任何值。
答案 0 :(得分:1)
不要同时打开同一个文件进行阅读和写作。首先写入临时文件,然后重命名。或者,您可以先读取整个文件,存储所有内容,关闭Scanner
然后覆盖该文件。
答案 1 :(得分:0)
您的Formatter
每次都会截断输出文件。根据您在本文中的评论,您指出变量的数量将保持不变。您可以使用临时文件来实现此目的(+1到@biziclop):
File inputFile = new File("main.mcmm");
Scanner scanner = new Scanner(inputFile);
File tempFile = File.createTempFile("main.mcmm",".temp");
Formatter y = new Formatter(tempFile);
y.format("%s", name);
// more reading & formatting, etc.
y.close();
scanner.close();
inputFile.delete();
tempFile.renameTo(inputFile);
请务必关闭Scanner
和Formatter
,以便输入&输出文件可以删除&分别改名。