Java扫描程序不通过整个文件

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

我的代码:

    //initialize state space
private static Set<String> posible(String posLoc) throws FileNotFoundException {
    Scanner s = new Scanner(new File(posLoc));
    Set<String> result = new TreeSet<String>();
    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<String> posible2(String posLoc) {
      Set<String> result = new TreeSet<String>();
      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关于字符编码的评论。

我重新保存了我正在读入UTF-8.txt ,它解决了这个问题。 事实证明,记事本默认为ANSI。

链接地址: http://www.djcxy.com/p/17209.html

上一篇: Java scanner not going through entire file

下一篇: Running a Java program with input from a file