Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/230.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 尝试从扫描仪读取时,文件内容将被擦除_Java_File_Java.util.scanner - Fatal编程技术网

Java 尝试从扫描仪读取时,文件内容将被擦除

Java 尝试从扫描仪读取时,文件内容将被擦除,java,file,java.util.scanner,Java,File,Java.util.scanner,所以我试着用扫描仪读取一个文件,但是,文件的所有内容都被擦除了,然后它什么也不读取。以下是我在主要方法中连续运行的方法: 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");

所以我试着用扫描仪读取一个文件,但是,文件的所有内容都被擦除了,然后它什么也不读取。以下是我在主要方法中连续运行的方法:

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.-”变量没有任何值。

您的
格式化程序每次都会截断输出文件。从你在这篇文章中的评论中,你指出变量的数量将保持不变。您可以使用临时文件来实现这一点(+1到@biziclop):


请记住关闭
扫描仪
格式化程序
,以便分别删除和重命名输入和输出文件。

您的
格式化程序每次都会截断输出文件。从你在这篇文章中的评论中,你指出变量的数量将保持不变。您可以使用临时文件来实现这一点(+1到@biziclop):



请记住同时关闭
扫描仪
格式化程序
,以便分别删除和重命名输入和输出文件。

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

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

什么是
y=new Formatter(“main.mcmm”)应该做什么?这是用于将数据写入文件的。它与此无关,事实上,它与此无关。按照javadoc中的规定,它会将文件清除干净<代码>用作此格式化程序目标的文件的名称。如果文件存在,那么它将被截断为零大小;否则,将创建一个新文件。
哦,我明白了,非常感谢您没有用流格式化fork?对于字符串格式化程序来说,这是一种更好的方法。什么是
y=new格式化程序(“main.mcmm”)应该做什么?这是用于将数据写入文件的。它与此无关,事实上,它与此无关。按照javadoc中的规定,它会将文件清除干净<代码>用作此格式化程序目标的文件的名称。如果文件存在,那么它将被截断为零大小;否则,将创建一个新文件。
哦,我明白了,非常感谢您没有用流格式化fork?对于字符串格式化程序来说,这是一种更好的方法。我同意,我们打算进行注释,但你抢先了我一步。没有擦除文件,但是,在:Main.verMod=x.nextFloat()处给了我一个:java.util.InputMismatchException;lineCheck输入文件的格式,它看起来应该是一个
浮点值,但找不到该位置。@Reimeus此代码只会将输出附加到输入文件的末尾。我不认为这是OP想要的,尽管我只是猜测。我同意,我本来打算发表评论,但你抢先了我一步。没有擦除文件,但是,在:Main.verMod=x.nextFloat()处给了我一个:java.util.InputMismatchException;lineCheck输入文件的格式,它看起来应该是一个
浮点值,但找不到该位置。@Reimeus此代码只会将输出附加到输入文件的末尾。我不认为这是OP想要的,尽管我只是猜测。
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);