Java 扫描器不遍历整个文件

标签 java file-io java.util.scanner

我正在用 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)

当然,“scanner stops reading here”不在数据中,我只是标记扫描仪停止读取文件的位置。这是文件中的 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());

并表明它认为文件已经结束。我正在逐渐从数据中删除行到文件,以查看是哪一行导致了问题,但将留给您。

关于Java 扫描器不遍历整个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8330695/

相关文章:

字符数组比较和 while 循环在 C 中无法正常工作

java - 如何在单个方法中单独计算字符串中两个字符的出现?

c# - 当事件发生时将数据写入 xml 时出现问题

file - 如何在 Lisp 中创建和写入文本文件

java - 从java中的数组中查找重复元素出现两次以上

Java Scanner 换行符用正则表达式解析(错误?)

java - 如何使用java程序执行flume配置文件?

Java通过位移位增加int颜色的亮度

java - lombok.config 上的 addLombokGeneratedAnnotation 不会忽略 Jacoco 报告上的 Lombok Annotations

java - 抽象方法中声明的实现的动态返回类型