3

所以我是编程的初学者,我试图找出问题所在

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

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

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

删除println它不进入循环的语句之一,另一个打印

声明告诉我scan.hasNext()的。

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

发现如果我为总共 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;

}
4

1 回答 1

0

好的,所以我想通了。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 是缓冲区大小。谢谢大家的贡献。

于 2012-12-19T08:21:50.207 回答