扫描仪没有读取文件

时间:2017-12-14 23:35:22

标签: java java.util.scanner

我正在尝试创建一个从文件中读取单词并将其保存在名为common的字符串中的方法。

在此之后,它应该将字符串列表中的单词(而不是ArrayList)中的单词进行比较,并删除列表中出现在文件中的任何节点(或常用的字符串)

当我编译这个程序时,它工作正常。它也运行。但是,出于某种原因,它只是跳过while循环

private void removeCommonEnglishWords() {   
    Scanner infile = null;
    try {
        infile = new Scanner( new FileInputStream( "filename" ) );
    } catch(Exception e) {
        System.out.println("Nope");
    }

    String common = "";
    while (infile.hasNext()) {
        common = common + infile.next() + " ";
    }

    for (int k = 0; k < terms.size(); k++) {
        if (common.contains(terms.get(k))) {
          terms.remove(k);
        }
    }
}

1 个答案:

答案 0 :(得分:0)

如果它跳过while循环,那么这意味着你唯一可能的问题是&#34; infile&#34;没有定义,并且它从初始化开始为空,或者它只是空的。

实际上,通过查看此代码snibbit,这是有道理的。在您的代码中,这是您在try块中运行的唯一内容:

try {
      infile = new Scanner( new FileInputStream( "filename" ) );
}

// By the way you should use this instead
try( /*initialized resources here */ ) {
     //Do work here
}

您的所有工作都需要在此try块中。这是因为如果输入流发生某些事情,或者您的代码触发异常,则需要正确处理。上面提到的try(with resources)块会在代码执行继续之前自动尝试在try块之后直接关闭声明的资源。这主要是出于安全原因,因此其他用户无法获取您的资源并对其进行操作。

例如,您的代码块可能看起来像下面(我在这里放置虚拟示例代码):

try ( FileOutputStream fos = new FileOutputStream("server/file.txt")) {
    // Do work.
    byte[] byteArray = new byte[9]();
    fos.write(byteArray);

// Try with resources block will automatically try closing the resources, 
//but if there are any errors, they are suppressed.  You can still print the 
//supressed errors, but you will have to write extra code for this.
} catch(Exception e) {
    // Always print out logs, so you know what went wrong!
    e.printStackTrace();
    System.out.println("Whoops! There was an error, please fix.");
}

Here是尝试使用资源的文档,如果您想了解更多信息:)

另外,您没有指定文件名的任何内容,但是您确定自己拥有正确的文件路径吗?