Java Scanner.hasNextLine()方法没有看到文件中的下一行
我有以下代码:Java Scanner.hasNextLine()方法没有看到文件中的下一行,java,xml,Java,Xml,我有以下代码: Scanner scanner = new Scanner (file); while (scanner.hasNextLine()){ System.out.println ("Next line"); String line = scanner.nextLine(); } 起初,print语句从未执行过。我认为这很奇怪,因为该文件是一个xml文件,大约有2000行。对于kicks,我尝试在初始化Scanner对象之前插入以下内容: try{ D
Scanner scanner = new Scanner (file);
while (scanner.hasNextLine()){
System.out.println ("Next line");
String line = scanner.nextLine();
}
起初,print语句从未执行过。我认为这很奇怪,因为该文件是一个xml文件,大约有2000行。对于kicks,我尝试在初始化Scanner对象之前插入以下内容:
try{
Desktop.getDesktop().open(file);
} catch (Exception e){}
当我运行程序时,文件被打开,print语句被执行了2000次(这意味着scanner.hasNextLine()工作正常)。我认为这是一个与权限有关的问题,因此注释掉了上面的代码,我尝试:
file.setWritable(true);
file.setExecutable(true);
file.setReadable(true);
scanner.hasNextLine()返回到不工作状态,并且从未执行print语句。我做错了什么
更新:
整个函数如下所示:
public void addToList (File file){
try{
file.setWritable(true);
file.setExecutable(true);
file.setReadable(true);
if (file.exists())
System.out.println("File exists");
Scanner scanner = new Scanner (file, "UTF-8");
int lineCount=0;
while (scanner.hasNextLine()){
System.out.println("Next line");
String line = scanner.nextLine();
}
}
catch (FileNotFoundException e){
System.err.println (e.getMessage());
}
}
System.out.println("Next line" + line);
其中文件是绝对路径您尚未打印行。在生成
字符串行
并为其分配scanner.nextLine()
的值后,该行未被使用。尝试按如下方式打印该行:
public void addToList (File file){
try{
file.setWritable(true);
file.setExecutable(true);
file.setReadable(true);
if (file.exists())
System.out.println("File exists");
Scanner scanner = new Scanner (file, "UTF-8");
int lineCount=0;
while (scanner.hasNextLine()){
System.out.println("Next line");
String line = scanner.nextLine();
}
}
catch (FileNotFoundException e){
System.err.println (e.getMessage());
}
}
System.out.println("Next line" + line);
您使用了
尝试
,但从未捕获任何内容,这可能是问题所在。当我添加一个catch并使用xml
文件运行此代码时,它工作得很好:
public static void main(String[] args) {
addToList(new File("/Users/[YourName]/Desktop/[FileName].xml"));
}
public static void addToList (File file){
try{
file.setWritable(true);
file.setExecutable(true);
file.setReadable(true);
if (file.exists())
System.out.println("File exists");
Scanner scanner = new Scanner (file, "UTF-8");
int lineCount=0;
while (scanner.hasNextLine()){
System.out.println("Next line");
String line = scanner.nextLine();
}
} catch (Exception e) {
System.out.println(e);
}
}
这并不能解决OP的问题。尽管如此,它仍然应该打印“下一行”2000次。我最初是传递包含我的代码的方法的绝对路径,但在阅读了这篇文章后,我硬编码了我的一个文件的位置,它成功了。非常奇怪。@0另一个潜伏者这个答案解决了你的问题吗?您可以接受和/或投票表决任何对您的问题有用的答案。遗憾的是,否。我的完整方法如下:public void addToList(File File File){try{System.out.println(“当前文件:+File.toString());File.setWritable(true);File.setExecutable(true);File.setReadable(true);if(File.exists())System.out.println(“文件存在”);Scanner Scanner=new Scanner(文件,“UTF-8”);int lineCount=0;while(Scanner.hasNextLine()){System.out.println(“下一行”);String line=Scanner.nextLine();}抱歉,格式太难看了。我用上面的代码更新了我的原始帖子。当我硬编码一个绝对文件时,它可以工作,但如果我试图通过该方法传递一个现有文件,它就不工作了。该文件确实存在,因为exists函数可以工作,并且当我将它传递到Desktop.getDesktop.open(文件)中时,它会打开file@an0therlurker您使用了
try
,但从未捕获任何内容。这可能是问题所在吗?听起来很奇怪,因为代码本身在我这方面应该可以正常工作。尝试将问题包含在内。您是否能够使用其他方法(如FileReader
或Javas NIOFiles
类)读取文件?如何创建文件对象?您确定它指向正确的文件吗?文件上的方法是否有效,如文件#getName
?文件或您的系统有什么不寻常的地方吗?您能用一个较小的示例文件重现问题吗?如果是,请向我们展示该文件。该问题是否也发生在其他文件或仅此文件上?我确信文件之所以存在,是因为我在程序中创建了它,之后我可以在文件系统中查看它。因此,我基本上要做的是从文件系统中获取一个ichat文件,从中创建一个xml文件,并将其放入/Users/me/directory/中,然后将该文件传递给我的addtoList方法,以便我可以解析它(这就是为什么我使用扫描仪逐行扫描的原因)。我从我的项目中创建了另一个java文件,并使用了相同的方法,只是我硬编码了绝对路径,并将其直接传递给函数,并且由于某种原因,它工作正常。file.exists()
测试毫无意义。如果它不存在,将抛出一个FileNotFoundException
。您将强制系统测试它两次。