为什么这个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'。它实际上并没有打开文件,只是读取它的名称。思考?
答
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.
}
...
您是否阅读过'Scanner'的javadoc? – Kayaman 2014-08-28 21:35:03
http://docs.oracle.com/javase/7/docs/api/java/util/Scanner.html - 查看构造函数摘要。 – 2014-08-28 21:35:34