2015-04-01 1 views
1

Je veux lire un fichier texte et le traiter est data.so par exemple le fichier d'entrée ressemblera:lecture et l'écriture de fichiers de chaîne avec JSON en java

john,judd,134 
Kaufman,kim,345 

le programme doit analyser et stocker ces données sous la forme d'un fichier JSON il sera organisé pour processing.I'm en outre l'utilisation JSON-simple pour cette tâche est un .and ce code prototype que j'ai écrit:

package com.company; 

import org.json.simple.JSONObject; 

import java.io.*; 

public class Main { 


static JSONObject jsonObject = new JSONObject(); 
static String output; 

public static void main(String[] args) throws IOException { 

    read("/Users/Sepehr/Desktop/JSONexample.txt"); 
    write("/Users/Sepehr/Desktop/JSONexampleout,txt"); 

} 

public static String read(String filenameIn) throws IOException { 

    BufferedReader bufferedReader = new BufferedReader(new FileReader(filenameIn)); 
    String s ; 

    while ((s = bufferedReader.readLine()) != null) 

    { 
     String[] stringsArr = s.split(","); 


     jsonObject.put("famname" , stringsArr[0]); 
     jsonObject.put("name" , stringsArr[1]); 
     jsonObject.put("id", stringsArr[2]); 

     bufferedReader.close(); 


    } 

    return output=jsonObject.toJSONString(); 


} 


public static String write(String filenameOut) throws FileNotFoundException { 

    PrintWriter printWriter = new PrintWriter(filenameOut); 
    printWriter.write(jsonObject.toJSONString()); 
    printWriter.close(); 

    String se = "yaaayyy :|"; 
    return se; 

} 



} 

après l'exécution du programme ce sont les exceptions Je reçois:

Exception in thread "main" java.io.IOException: Stream closed 
at java.io.BufferedReader.ensureOpen(BufferedReader.java:97) 
at java.io.BufferedReader.readLine(BufferedReader.java:292) 
at java.io.BufferedReader.readLine(BufferedReader.java:362) 
at com.company.Main.read(Main.java:30) 
at com.company.Main.main(Main.java:18) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
at java.lang.reflect.Method.invoke(Method.java:597) 
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:140) 

qu'est-ce qui ne va pas exactement?

et comment devrait faire une meilleure conception pour ce programme?

+2

Sur une note de côté, ne pas oublier de corriger la faute de frappe dans l'extension de nom de fichier de sortie (point au lieu de virgule) 'écriture ("/Users/Sepehr/Desktop/JSONexampleout.txt ");' 'JSONexampleout.txt' pas' JSONexampleout, txt' – mshaaban

Répondre

1

Vous fermez la BufferedReader dans votre boucle

while ((s = bufferedReader.readLine()) != null) 

    { 
     String[] stringsArr = s.split(","); 


     jsonObject.put("famname" , stringsArr[0]); 
     jsonObject.put("name" , stringsArr[1]); 
     jsonObject.put("id", stringsArr[2]); 

     //************* 
     bufferedReader.close(); // don't close the reader! 
     //************* 

    } 
+1

notez que vous ne devez pas simplement supprimer l'instruction 'close', mais la déplacer afin qu'elle s'exécute ** après ** la boucle est terminée – Subler

+0

merci @ControlAltDel pouvez-vous donner des conseils sur la conception globale de ce programme que je veux faire? – Vicarious

+1

@Vicarious Votre conception m'a l'air bien pour le moment ... – ControlAltDel