为什么这个java代码没有打开文本文件?

时间:2014-08-28 21:33:29

标签: java file

我试图打开一个文件(words.txt),然后计算里面的元音数量。这是我的代码:

        Scanner input = new Scanner("words.txt");
    String fileContent = "";

    while (input.hasNext()) {

        fileContent += input.next() + " ";
    }
   input.close();

    char[] charArr = fileContent.toCharArray();
    int counter = 0;

    for(int i = 0; i < charArr.length; i++)

    {
          if(charArr[i] == 'a' || charArr[i] == 'e' || charArr[i] == 'i' || charArr[i] == 'o' || charArr[i] == 'u')

               counter++;
    }

  System.out.println(fileContent);

当我打印filecontent变量时,它告诉我它所持有的字符串是&#39; words.txt&#39;。它实际上并没有打开文件,只是读取它的名称。想法?

4 个答案:

答案 0 :(得分:2)

有一个Scanner constructor that takes a String,但它只是直接从String读取。

  

构造一个新的Scanner,它生成从指定字符串扫描的值。

您应该从文件名中创建File并将File传递给另一个Scanner constructor that takes a File

  

构造一个新的Scanner,它生成从指定文件扫描的值。

Scanner input = new Scanner(new File("words.txt"));

答案 1 :(得分:0)

Scanner类采用字符串;你永远不会给它一个实际文件的内容。

答案 2 :(得分:0)

试试这个

文件文件=新文件(&#34; word.txt&#34;); 然后在scnner中打开文件

答案 3 :(得分:0)

您可能希望使用正则表达式进行模式匹配,而不是使用if解决方案:

int counter = 0;        

try (final Scanner in = new Scanner(Paths.get("src/words.txt"))) {
    in.useDelimiter("[aeiouAEIOU]");

    while (in.hasNext()) {
        in.next()
        counter++;
    }
}

System.out.println("Number of vowels: " + (counter - 1));

或者对于更短的版本,请使用 for-loop

...
for (counter = 0; in.hasNext(); in.next(), counter++) {
    //do additional stuff like counting for statistics eg.
}
...