2017-05-01 1 views
1

J'ai essayé de lire un fichier txt (avec des textes à l'intérieur) dans chaque ligne. Ensuite, je traiterai les lignes plus tard.Impossible de lire le fichier txt par la ligne

Voici mon travail.

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(); 
     } 

    } 

} 

Cependant, j'obtiens l'erreur suivante. Je suis certainement sûr que le répertoire est correct cependant.

Erreur:

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 les codes d'échantillons peuvent être fournis pour lire le fichier txt par ligne?

Mise à jour mes fichiers txt doit être codé avec ANSI

Répondre

3

MalformedInputException signifie que votre fichier texte n'est pas dans le charset (encodage) vous avez demandé.

Bien que votre code ne précise pas explicitement charset, le 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 .

Depuis votre fichier texte n'est pas un fichier texte UTF-8, vous devrez specify its charset dans votre code. Si vous n'êtes pas sûr, le fichier utilise probablement le charset par défaut du système: Mise à jour

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

:

Vous avez dit dans un commentaire que votre fichier texte est « ANSI », qui est le (techniquement incorrect) nom que Windows utilise pour ses jeux de caractères à un octet. Sur une version américaine de Windows, vous voudrez probablement utiliser:

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

mon txt doit être encodé avec 'ANSI'. Mais votre code ne fonctionne pas – evalwt

+0

Obtenez-vous la même exception? – VGR

+0

OUI ............ – evalwt