Java扫描程序不会遍历整个文件

我正在用Java编写程序,我需要做的一件事就是为最短路径问题创建一组每个有效位置。 这些位置在.txt文件中定义,该文件遵循严格模式(每行一个条目,没有额外的空格),非常适合使用.nextLine来获取数据。 我的问题是文件中的241行(432中的一行)扫描仪在通过条目的3/4处停止工作并且不识别任何新行。

我的代码:

//initialize state space private static Set posible(String posLoc) throws FileNotFoundException { Scanner s = new Scanner(new File(posLoc)); Set result = new TreeSet(); String availalbe; while(s.hasNextLine()) { availalbe = s.nextLine(); result.add(availalbe); } s.close(); return result; } 

数据

 Shenlong Gundam Altron Gundam Tallgee[scanner stops reading here]se Tallgeese II Leo (Ground) Leo (Space) 

当然,“扫描仪在这里停止读取”不在数据中,我只是标记扫描仪停止读取文件的位置。 这是3068字节到文件中,但这不应该影响任何东西,因为在同一个程序中,几乎相同的代码,我正在读取编码路径的261行,14KB .txt文件。 任何帮助,将不胜感激。

谢谢。

扫描仪读取文件时出现问题,但我不确定它是什么。 它错误地认为它没有到达文件的末尾,可能是由于一些时髦的字符串编码。 尝试使用包装FileReader对象的BufferedReader对象。

例如,

  private static Set posible2(String posLoc) { Set result = new TreeSet(); BufferedReader br = null; try { br = new BufferedReader(new FileReader(new File(posLoc))); String availalbe; while((availalbe = br.readLine()) != null) { result.add(availalbe); } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { if (br != null) { try { br.close(); } catch (IOException e) { e.printStackTrace(); } } } return result; } 

编辑
我尝试将你的问题减少到最低限度,这足以引出问题:

  public static void main(String[] args) { try { Scanner scanner = new Scanner(new File(FILE_POS)); int count = 0; while (scanner.hasNextLine()) { String line = scanner.nextLine(); System.out.printf("%3d: %s %n", count, line ); count++; } 

我用printf检查了Scanner对象:

 System.out.printf("Str: %-35s size%5d; Has next line? %b%n", availalbe, result.size(), s.hasNextLine()); 

并表明它认为该文件已经结束。 我正在逐步删除从数据到文件的行,以查看导致问题的行,但是会留给您。

我遇到了同样的问题,这就是我所做的修复它:

 1.Saved the file I was reading from into UTF-8 2.Created new Scanner like below, specifying the encoding type: Scanner scanner = new Scanner(new File("C:/IDSBRIEF/GuidData/"+sFileName),"UTF-8"); 

我遇到了同样的问题。 扫描仪不会读到文件的末尾,实际上是在一个单词的中间停止。 我认为这是一个问题,扫描仪设置了一些限制,但我注意到rfeak关于字符编码的评论。

我重新保存了.txt我正在阅读UTF-8 ,它解决了这个问题。 事实certificate,记事本违反了ANSI。

我有一个txt文件,其中Scanner在第862行停止阅读,这是一个奇怪的问题。 我所做的是创建一个不同的文件(试图复制问题)。 我首先添加了少于862行,然后我添加了超过862行,它工作正常。

所以我认为问题在于,在我之前的文件中,在第862行,出现了一些错误,比如某些字符或符号可能会误导Scanner提前完成阅读。

总结:基于这种经验,我建议找出扫描仪停止读取的确切行,以找到解决问题的方法。

你应该用这个:

扫描仪扫描仪=新扫描仪(fileObj).useDelimiter(“\ z”);
的System.out.println(scanner.next());