尝试从扫描仪读取时擦除文件内容

时间:2012-11-23 21:16:27

标签: java file java.util.scanner

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

2 个答案:

答案 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);

请务必关闭ScannerFormatter,以便输入&输出文件可以删除&分别改名。