자바 파일에서 라인을 읽을 수 없습니다

믿음을 ayyoob :

나는 다음과 같은 코드 조각 파일을 읽고 있어요 :

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

나는 정력을 사용하여 파일을 열 때, 일부 라인은 다음과 같은 특수 문자로 시작 :

여기에 이미지 설명을 입력

하지만 자바 코드는이 라인을 읽을 수 없습니다. 그것은이 라인에 도달하면 그것은 파일 및 hasNextLine () 함수를 반환 거짓의 종말이라고 생각합니다!

편집 :이 언급 (문제) 라인의 진수 덤프입니다 :

0000000 : 9c20 302e 3230 3133 3220 302e 3231 E280 ... 0.20132 0.21 0,000,010 : 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받는 두 번째 매개 변수로 전달하여 Scanner생성자 :

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

추천

출처http://43.154.161.224:23101/article/api/json?id=212592&siteId=1