2017-05-11 1 views
0

J'ai un problème avec l'entrée que je reçois en lisant un fichier.Sortie impaire du fichier

Le fichier est fait dans une autre activité et est très simple:

ArrayList stuff = new ArrayList(); 
stuff.add("1,2,3"); 

try{ 
String saveFile = "saveGamesTest1.csv"; 
FileOutputStream saveGames = openFileOutput(saveFile, getApplicationContext().MODE_APPEND);  

ObjectOutputStream save = new ObjectOutputStream(saveGames); 

save.writeObject(stuff);  
save.close(); } 

Dans l'autre activité, il est en cours de lecture via

try { 
      FileInputStream fileIn=openFileInput("saveGamesTest1.csv"); 
      InputStreamReader InputRead = new InputStreamReader(fileIn); 

      Scanner s = new Scanner(InputRead).useDelimiter(","); 
      System.out.println(s.next()); 
      System.out.println(s.next()); 
      System.out.println(s.next()); 

     } 

Je me attendais (et en espérant) pour obtenir un résultat de retour comme

Cependant, le résultat que je reçois est la suivante:

/storage/emulated/0/Android/data/ys.test/files/saveGamesTest1.csvsr java.util.ArrayListxaIsizexpwt1
3x

Qu'est-ce que Je fais mal?
.

EDIT
J'ai essayé Serializable comme suggéré ci-dessous, comme suit:

public class Save implements java.io.Serializable { 
     public String name; 
     public String address; 
     public transient int SSN; 
     public int number; 

    } 


    public void save(){ 

     Save e = new Save(); 
     e.name = "Reyan Ali"; 
     e.address = "Phokka Kuan, Ambehta Peer"; 
     e.SSN = 11122333; 
     e.number = 101; 

     try { 
      String saveFile = "save.ser"; 
      FileOutputStream saveGames = openFileOutput(saveFile, getApplicationContext().MODE_APPEND); 
      ObjectOutputStream out = new ObjectOutputStream(saveGames); 
      out.writeObject(e); 
      out.close(); 
      saveGames.close(); 
      System.out.printf("Serialized data is saved in save.csv"); 
     } 
     catch(IOException i) { 
      i.printStackTrace(); 
      out.println("Save exception gepakt"); 
     } 
    } 

Cependant, out.writeObject(e); donne une erreur en disant que ce n'est pas Serializable

+0

JavaScript! = Java – Roope

Répondre

1

Vous n'êtes pas de stockage d'objets comme csv mais comme sérialiser objet java vous devez lire comme un objet pas comme un fichier csv

jeter un oeil ici https://www.tutorialspoint.com/java/java_serialization.htm à sérialisation d'une partie de l'objet

Vous devez utiliser

FileInputStream in = null; 
ObjectInputStream ois = null; 
ArrayList stuff2 = null; 
try { 
    in = openFileInput("saveGamesTest1.csv"); 
    ois = new ObjectInputStream(in); 
    stuff2 = (ArrayList) ois.readObject(); 
} catch(IOException e) {...} 
catch(ClassNotFoundException c) {...} 
finally { 
    if (ois != null) { 
     ois.close(); 
    } 
    if (in != null) { 
     in.close(); 
    } 
} 

Si vous voulez un fichier csv, vous devez construire par exemple par itérer sur votre tableau et écrire un par un de la valeur dans votre fichier et en ajoutant le séparateur ou suivre ce How to serialize object to CSV file?

EDIT: une façon élégante en Java 7 à sérialiser un objet (ici une liste comme dans votre exemple) et deserialize:

public class Main { 

public static void main(String[] args) { 
    List<Integer> lists = new ArrayList<>(); 
    List<Integer> readList = null; 
    String filename = "save.dat"; 
    lists.add(1); 
    lists.add(2); 
    lists.add(3); 

    //serialize 
    try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(filename))) { 
     oos.writeObject(lists); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
    //don't need to close because ObjectOutputStream implement AutoCloseable interface 

    //deserialize 
    try (ObjectInputStream oos = new ObjectInputStream(new FileInputStream(filename))) { 
     readList = (List<Integer>) oos.readObject(); 
    } catch (IOException | ClassNotFoundException e) { 
     e.printStackTrace(); 
    } 
    //don't need to close because ObjectInputStream implement AutoCloseable interface 


    //test 
    if(!lists.equals(readList)) { 
     System.err.println("error list saved is not the same as the one read"); 
    } 
} 

} 
+0

J'ai essayé d'utiliser [cet exemple] (https://www.tutorialspoint.com/java/java_serialization.htm) que vous m'avez donné. Mais il en résulte une erreur à 'out.writeObject (e);' dire que ce n'est pas sérialisable – YankeeSierra

+1

Votre objet e a-t-il été implémenté sérialisable ?? – Timo

+0

Votre première implémentation avec 'stuff' fonctionne? Si oui, vous avez juste besoin de lire ne pas écrire – Timo