为什么这个java代码不能打开文本文件?

问题描述:

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

 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变量,它告诉我它所持有的字符串是'words.txt'。它实际上并没有打开文件,只是读取它的名称。思考?

+2

您是否阅读过'Scanner'的javadoc? – Kayaman 2014-08-28 21:35:03

+0

http://docs.oracle.com/javase/7/docs/api/java/util/Scanner.html - 查看构造函数摘要。 – 2014-08-28 21:35:34

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

+0

http://docs.oracle.com/javase/7/docs/api/java/util/Scanner.html – 2014-08-28 21:36:50

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

构造一个新的扫描器,该扫描器产生从指定字符串扫描的值。

您应该创建从文件名的File并通过File另一个Scanner constructor that takes a File

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

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

试试这个

档案文件=新的文件( “WORD.TXT”); 然后在scnner打开文件

您可能需要使用正则表达式您模式的匹配,而不是你的,如果解决方案:

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 (counter = 0; in.hasNext(); in.next(), counter++) { 
    //do additional stuff like counting for statistics eg. 
} 
...