Java scan.hasNext false应为true时为false

Java scan.hasNext false应为true时为false,java,filewriter,bufferedwriter,Java,Filewriter,Bufferedwriter,所以我是一个编程新手,我正试图找出 以下功能。问题在于scan.hasNext()方法我有两个println 语句(一个在我进行扫描之后,另一个在第二个方法上)告诉我scan.hasNext()是否返回true或false。奇怪的是 现在的代码进入while循环,这是应该发生的,但是当我 删除其中一个println语句,它不会进入循环,另一个则会打印 语句告诉我scan.hasNext()为false 这很奇怪,因为除了删除打印语句,我什么都没做。此外,我 发现如果我为总共3条打印语句再添加一条

所以我是一个编程新手,我正试图找出

以下功能。问题在于
scan.hasNext()
方法我有两个
println

语句(一个在我进行扫描之后,另一个在第二个方法上)告诉我
scan.hasNext()
是否返回true或false。奇怪的是

现在的代码进入while循环,这是应该发生的,但是当我

删除其中一个
println
语句,它不会进入循环,另一个则会打印

语句告诉我
scan.hasNext()
为false

这很奇怪,因为除了删除打印语句,我什么都没做。此外,我

发现如果我为总共3条打印语句再添加一条,它将再次为假,如果我

再加上第四个,这又是真的,等等。我想我只是不明白hasNext是怎么工作的,因为我

不知道如何跟踪“光标”的位置

public void createFile(String filename){    
    final File file = new File(filename);       
    try{
        scan = new Scanner(file);
        **System.out.println(scan.hasNext());**
        buff = new BufferedWriter(new FileWriter(filename), 1);         
    }
    catch(Exception e1){
        try{
            buff = new BufferedWriter(new FileWriter(filename));
            scan = new Scanner(file);
        }
        catch(Exception e2){
            System.out.println("Error trying to create file");
        }   
    }
}

public String readFile(){
    String fileContents = "";
    **System.out.println(scan.hasNext());**
    if(scan.hasNext())
        while(scan.hasNext())
            fileContents = fileContents + scan.next()+" "+scan.next()+" "+scan.next();
    return fileContents;

}

好吧,我想起来了。vishal_aim的建议帮助我解决了这个问题。下一行

buff = new BufferedWriter(new FileWriter(filename), 1);
正在将我的文件截断回零大小。原因是我真的想这么做

buff = new BufferedWriter(new FileWriter(filename, true));

首先我放了一个,因为我认为java在要求布尔值时会自动使1为真。其次,我尝试使用FileWriter类的构造函数,它允许我附加到文件的末尾。如果文件名中没有包含true,则会生成一个新文件,截断文件中必须为0的任何内容。如果需要将布尔值放在BufferedWriter或FileWriter上,我已经忘记了这只是一个累人的错误。另外,如果您想知道BufferedWriter构造函数没有告诉我错误的原因,是因为它有一个构造函数接受int,int是缓冲区大小。感谢大家的贡献。

您的两份打印声明在哪里?我只看到一个。显示输入文件的示例内容