Javaはファイルから行を読み取ることができません

ayyoobの信仰:

私は以下のコードを含むファイルを読んでいます:

 Scanner in = new Scanner(new File(fileName));
    while (in.hasNextLine()) {
        String[] line = in.nextLine().trim().split("[ \t]");
       .
       .
       .
    }

私はVIMを使用してファイルを開くと、いくつかの行は、次の特殊文字で始まります。

ここでは、画像の説明を入力します。

しかし、Javaコードは、これらの行を読み取ることができません。それはこれらの行に達すると、それはファイルの終わりだとhasNextLine()関数がfalseを返すことを考えています!

EDIT:これは、言及した(問題の)ラインの進ダンプです。

0000000:9c20 302E 3230 3133 3220 3231 302E E280 ... 0.20132 0.21 0000010:3431 392d 302E 3034 0A 419から0.04。

そのほかの男:

@VGRはそれが右です。

TL; DR:使用 Scanner in = new Scanner(new File(fileName), "ISO-8859-1");

何が起こっているように見えることはということです。

  • あなたのファイルは有効なUTF-8という唯一0x9C文字によるものではありません。
  • これは、システムのデフォルトであるため、スキャナは、UTF-8のファイルを読んでいます
  • 基礎となるライブラリが投げます MalformedInputException
  • スキャナの漁獲量と隠れること(善意が、見当違いのデザインの決定)
  • それはもう行がないことを報告して開始します
  • あなたが実際にスキャナを依頼しない限り、あなたは何も逝ってしまった間違っを知ることができません

ここでMCVEです:

import java.io.*;
import java.util.*;

class Test {
  public static void main(String[] args) throws Exception {
    Scanner in = new Scanner(new File(args[0]), args[1]);
    while (in.hasNextLine()) {
      String line = in.nextLine();
      System.out.println("Line: " + line);
    }
    System.out.println("Exception if any: " + in.ioException());
  }
}

ここでは、通常の呼び出しの例を示します。

$ printf 'Hello\nWorld\n' > myfile && java Test myfile UTF-8
Line: Hello
Line: World
Exception if any: null

ここでは、あなたが(あなたが取得し、隠された例外を表示しないことを除いて)見ているものです。何行が示されていないことを特に注意してください:

$ printf 'Hello\nWorld \234\n' > myfile && java Test myfile UTF-8
Exception if any: java.nio.charset.MalformedInputException: Input length = 1

そして、ここではISO-8859-1、すべてのバイト配列が(0x9Cが無い文字が割り当てられており、したがって、端末に表示されないにもかかわらず)有効であるにデコードとして復号化されている場合:

$ printf 'Hello\nWorld \234\n' > myfile && java Test myfile ISO-8859-1
Line: Hello
Line: World
Exception if any: null

あなただけASCIIデータに興味を持っているし、任意のUTF-8文字列を持っていない場合は、単に使用するスキャナを頼むことができるISO-8859-1の2番目のパラメータとして渡すことでScanner、コンストラクタ:

Scanner in = new Scanner(new File(fileName), "ISO-8859-1");

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=212594&siteId=1