【问题标题】:scan.hasNext false when it should be truescan.hasNext 应该为真时为假
【发布时间】:2012-12-06 12:32:27
【问题描述】:

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

以下功能。问题在于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;

}

【问题讨论】:

  • 你哪里有两个 println 语句?我只看到一个。
  • 显示输入文件的示例内容

标签: java filewriter bufferedwriter


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2020-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-23
    • 2013-03-23
    • 2016-08-26
    相关资源
    最近更新 更多