入力の処理に関しては、Scanner型が奇妙に一貫していません。これは I/O 例外を飲み込みます (消費者はこれらを明示的にテストする必要があります)。そのため、読者にエラーを通知するのは簡単ではありません。しかし、文字データをデコードするときの型は厳密です。正しくエンコードされていないテキストや間違ったエンコーディングを使用するとIOException、型がすぐに飲み込んでしまう an が発生します。
このコードは、エラー チェックを使用してテキスト ファイル内のすべての行を読み取ります。
  public static List<String> readAllLines(File file, Charset encoding)
      throws IOException {
    List<String> lines = new ArrayList<>();
    try (Scanner scanner = new Scanner(file, encoding.name())) {
      while (scanner.hasNextLine()) {
        lines.add(scanner.nextLine());
      }
      if (scanner.ioException() != null) {
        throw scanner.ioException();
      }
    }
    return lines;
  }
このコードは行を読み取り、デコーダーが理解できないコードポイントを疑問符に変換します。
  public static List<String> readAllLinesSloppy(File file, Charset encoding)
      throws IOException {
    List<String> lines = new ArrayList<>();
    try (InputStream in = new FileInputStream(file);
        Reader reader = new InputStreamReader(in, encoding);
        Scanner scanner = new Scanner(reader)) {
      while (scanner.hasNextLine()) {
        lines.add(scanner.nextLine());
      }
      if (scanner.ioException() != null) {
        throw scanner.ioException();
      }
    }
    return lines;
  }
これらの方法は両方とも、多くの場合 Unicode ではないデフォルトのエンコーディングに依存するのではなく、エンコーディングを明示的に提供する必要があります (標準の定数も参照してください)。
コードは Java 7 構文であり、テストされていません。