当前位置: 首页 > 面试题库 >

Java扫描器无法遍历整个文件

季阳朔
2023-03-14
问题内容

我正在用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的文件,该文件对路径进行了编码。任何帮助,将不胜感激。

谢谢。


问题答案:

扫描程序读取您的文件时出现问题,但是我不确定它是什么。它错误地认为,当文件尚未到达文件末尾时,它可能是由于某些时髦的String编码所致。尝试使用包装了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());

并表明它认为文件已结束。我正在逐步从数据到文件中删除行,以查看引起问题的行,但将其留给您。



 类似资料:
  • 问题内容: 扫描程序无法阅读整个句子。或者说我正在编写一种方法,该方法可以反转句子中的单词,同时保持句子中的单词顺序。 我的扫描仪: 但是当我写一个句子时,它会将第一个单词反转并停止。 问题答案: 您需要使用nextline()函数代替next()来捕获整行Change 代替

  • 我有一个类,它创建多个对象,并将它们放入中,如下所示: 我有一个应用程序,它从控制台扫描输入“add”,如果找到,就调用方法,如下所示: 应用程序应该允许用户输入“add”,但在调用方法后,将出现错误“no line found”。 我猜这是因为方法中的没有关闭,然后在需要时重新打开。这是程序的问题吗?如果是,我该如何修复它? 请注意,这个程序还没有完成,因为我将添加一个出售这些股票的销售方法。这

  • 问题内容: 据我所知,在Java中从文件读取基于字符的数据的两种最常见的方法是使用或。我也知道通过使用缓冲区来避免物理磁盘操作来有效地读取文件。我的问题是: 是否执行以及? 为什么你会选择在反之亦然? 问题答案: 用于从流的内容中解析令牌,而只是读取流,并且不执行任何特殊的解析。 实际上,你可以将传递给作为要解析的字符源。

  • 我应该在属性文件中添加什么以便它包括。模块文件?

  • 本文向大家介绍Python遍历整个可迭代,包括了Python遍历整个可迭代的使用技巧和注意事项,需要的朋友参考一下 示例            

  • 我需要在一种方法中将文件名作为扫描仪的输入,并在所有其他方法中将该扫描仪用作其余代码的文件路径的引用。 我正在学习文件I/o,对于这个项目,我应该以文件名作为输入,计算文件中的行数,并将每行放入一个数组中。 我的问题出现在FileUtils期间。countRecords方法。在FileUtils中返回文件类型后。打开输入文件(openInputFile),然后将数据放入扫描仪(代码中的变量inf和