1

所以我正在尝试使用扫描仪读取文件,但是,文件的所有内容都被擦除了,然后它什么也没有读取。以下是我在 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.-”变量没有任何值。

4

2 回答 2

1

不要同时打开同一个文件进行读写。先写入临时文件,然后重命名。或者,您可以先读取整个文件,存储所有内容,关闭Scanner然后覆盖文件。

于 2012-11-23T21:25:22.763 回答
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以便可以分别删除和重命名输入和输出文件。

于 2012-11-23T21:21:32.407 回答