2016-08-11 4 views
2

Ich benutze die Bibliothek javax.json und versuche, ein JsonObject in einer Textdatei zu lesen. Ich benutze diese Methode, um eine Datei zu lesen und es als JsonObject zurück:JSON-Datei zu kurz, um einen JsonReader zu erstellen

public static JsonObject readFile(String path) 
{ 
    InputStream is = new FileInputStream(path); 
    JsonReader rdr = Json.createReader(is); 
    JsonObject obj = rdr.readObject(); 
    rdr.close(); 
    return obj; 
} 

Allerdings, wenn ich versuche, eine Datei zu lesen, ich erhalte eine Fehlermeldung bei der JsonReader rdr = Json.createReader(is) Linie besagen, dass es

"Codierung kann nicht automatisch erkannt werden, nicht genug Zeichen".

Gibt es etwas, was ich tun kann, um diesen Fehler zu beheben, ohne zu ändern, was in der Datei ist?

Die Dateien sind wie folgt aus:

{"6111":1,"6121":1,"6131":1,"6141":1,"6151":1,"6162":1,"6312":1,"6323":1,"6331":1,"6343":1,"totalGames":1}

+0

Wie wird diese Datei erstellt? Sie sollten die Codierung beim Speichern von Dateien definieren. – new

+0

@new Die Datei wird mithilfe von PrintWriter mit der Codierung erstellt, die beim Speichern der Datei definiert wurde. –

Antwort

4

Wie die Methode angegeben createReader() mehr Zeichen muss Datei charset

, während die Dateien zu klein zu erkennen ist, dass zu ermöglichen, können Sie die charset passieren dies das Verfahren

versuchen:

public static JsonObject readFile(String path) 
{ 
    InputStream is = new FileInputStream(path); 
    JsonReader rdr = Json.createParserFactory(null).createReader(is, java.nio.charset.StandardCharsets.UTF_8); 
    JsonObject obj = rdr.readObject(); 
    rdr.close(); 
    return obj; 
} 

Wenn Sie einen anderen Zeichensatz als "UTF8" verwenden, ändern Sie den für den verwendeten

+0

Die createReader-Methode verwendet nur einen InputStream als Parameter, so dass ich den Zeichensatz nicht so hinzufügen kann. –

+0

@StevenT Sie können die Codierung auf Ihrem InputStream verwenden neuen InputStreamReader (neue FileInputStream (PfadToFile), ). – new

+0

Sorry, dies sollte auf Instanz von 'JsonReaderFactory' aufgerufen werden Ich werde nach einem Beispiel suchen und die Antwort aktualisieren – Yazan