Java 扫描程序无法遍历整个文件

2022-09-02 12:33:04

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

谢谢。


答案 1

扫描仪读取文件 时出现问题,但我不确定是什么。它错误地认为它已经到达了文件末尾,而它没有,可能是由于一些时髦的字符串编码。请尝试使用包装 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 检查了扫描仪对象:

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

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


答案 2

我遇到了同样的问题,这就是我为解决它所做的:

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");