2017-05-11 15 views
0

ファイルの読み込み中に入力に問題があります。ファイルからの奇妙な出力

ファイルが別の活動で作られ、非常に単純です:それは

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

     } 

経由で読まれています他の活動で

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

私は戻って結果を得ることを期待(と期待して)して以下のような

しかし、私は取得していた結果がこれです:

/storage/emulated/0/Android/data/ys.test/files/saveGamesTest1.csvsr java.util.ArrayListxaIsizexpwt1
何午前 3倍

私は間違っている?

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

をしかし、out.writeObject(e);あなたはCSVなどのオブジェクトを格納していない、これはシリアライズ

+0

JavaScriptを有効にしてください。 – Roope

答えて

1

ないというエラーを与える:以下示唆したように、私は次のように、直列化を試みた

EDIT
しかし、Javaオブジェクトをシリアライズすると、CSVファイルではなくオブジェクトとして読み込む必要があります。

ここをクリックCSVファイルをしたい場合は、

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

を使用するように、あなたの配列を反復処理することにより、例えばそれを構築し、一つずつあなたのファイルの値を記述する必要が持つオブジェクトの一部

のシリアル化で (ここではあなたの例のようにリスト)のオブジェクトをシリアル化するためのJava 7で エレガントな方法とデシリアライズ:

とセパレータを追加したりすることは、この How to serialize object to CSV file?

EDITに従ってください

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

私があなたに与えた[この例](https://www.tutorialspoint.com/java/java_serialization.htm)を使ってみました。しかし、それは 'out.writeObject(e);でエラーになります。それはシリアル化可能ではないと言っています – YankeeSierra

+1

あなたのオブジェクトはシリアル化可能な実装ですか?? – Timo

+0

あなたの最初のimplémentation 'stuff'の作品ですか?もしあなたがただ読む必要があるならば、 – Timo