2017-05-01 26 views
1

すべての行でテキストを含むテキストファイルを読み込もうとしましたが、後でその行を処理します。行ごとにtxtファイルを読み取ることができません

ここは私の仕事です。

import java.io.IOException; 
import java.nio.file.Files; 
import java.nio.file.Paths; 
import java.util.stream.Stream; 

public class Fypio { 

    public static void main(String args[]) { 

     String fileName = "e://input.txt"; 

     //read file into stream, try-with-resources 
     try (Stream<String> stream = Files.lines(Paths.get(fileName))) { 

      stream.forEach(System.out::println); 

     } catch (IOException e) { 
      e.printStackTrace(); 
     } 

    } 

} 

ただし、次のエラーが発生します。私は間違いなくディレクトリが正しいと確信しています。

エラー:

Exception in thread "main" java.io.UncheckedIOException: java.nio.charset.MalformedInputException: Input length = 1 
    at java.io.BufferedReader$1.hasNext(BufferedReader.java:574) 
    at java.util.Iterator.forEachRemaining(Iterator.java:115) 
    at java.util.Spliterators$IteratorSpliterator.forEachRemaining(Spliterators.java:1801) 
    at java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:580) 
    at fypio.Fypio.main(Fypio.java:21) 
Caused by: java.nio.charset.MalformedInputException: Input length = 1 
    at java.nio.charset.CoderResult.throwException(CoderResult.java:281) 
    at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:339) 
    at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:178) 
    at java.io.InputStreamReader.read(InputStreamReader.java:184) 
    at java.io.BufferedReader.fill(BufferedReader.java:161) 
    at java.io.BufferedReader.readLine(BufferedReader.java:324) 
    at java.io.BufferedReader.readLine(BufferedReader.java:389) 
    at java.io.BufferedReader$1.hasNext(BufferedReader.java:571) 
    ... 4 more 

#Or任意のサンプルコードはラインでTXTファイルを読み込むために提供することができますか?

私のTXTファイルがANSI

答えて

3

MalformedInputExceptionでエンコードする必要があります更新はテキストファイルは、あなたが要求したcharset(符号化)ではないことを意味します。

あなたのコードは明示的に文字セットを指定していませんが

Files.lines method always uses UTF-8

Read all lines from a file as a Stream . Bytes from the file are decoded into characters using the UTF-8 charset .

テキストファイルがUTF-8のテキストファイルではないので、あなたのコード内specify its charsetする必要があります。あなたがわからない場合は、ファイルはおそらく、システムのデフォルト文字セットを使用しています。

try (Stream<String> stream = Files.lines(Paths.get(fileName), Charset.defaultCharset())) { 

アップデート:

あなたは、テキストファイルである(「ANSI」であることをコメントで述べています技術的に間違っている)名前Windowsは1バイトの文字セットに使用します。 Windowsの米国版では、おそらく使用したいと思うでしょう:

try (Stream<String> stream = Files.lines(Paths.get(fileName), Charset.forName("windows-1252"))) { 
+0

私のtxtは 'ANSI'でエンコードする必要があります。しかし、あなたのコードは動作していません – evalwt

+0

同じ例外がありますか? – VGR

+0

はい............ – evalwt

関連する問題