2013-08-11 12 views
9

ecco il codice: la mia missione è serializzare un mio oggetto (Persona), salvarlo in un file in Android (privatamente), leggere il file più tardi, (avrò un byte array) e deserializzare l'array byta.leggi/scrivi un oggetto nel file

 public void setup() 
    { 

      byte[] data = SerializationUtils.serialize(f); 


      WriteByteToFile(data,filename); 



    } 
Person p =null ; 
    public void draw() 
    { 
     File te = new File(filename); 
     FileInputStream fin = null; 


      try { 
       fin=new FileInputStream(te); 
       byte filecon[]=new byte[(int)te.length()]; 
       fin.read(filecon); 
       String s = new String(filecon); 
       System.out.println("File content: " + s); 
      } catch (FileNotFoundException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } catch (IOException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 






     text(p.a,150,150); 

    } 

e la mia funzione:

public void WriteByteToFile(byte[] mybytes, String filename){ 

     try { 

     FileOutputStream FOS = openFileOutput(filename, MODE_PRIVATE); 
     FOS.write(mybytes); 
     FOS.close(); 


     } catch (FileNotFoundException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     System.out.println("done"); 









    } 

sta tornando un FileNotFoundException.

(io sono nuovo a questo, vi preghiamo di essere pazienti e comprensivi)

EDIT :: questo è come sto (cercando di) leggere, (per cerntainly)

ObjectInputStream input = null; 
    String filename = "testFilemost.srl"; 
    try { 
     input = new ObjectInputStream(new FileInputStream(new File(new File(getFilesDir(),"")+File.separator+filename))); 
    } catch (StreamCorruptedException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (FileNotFoundException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    try { 
     Person myPersonObject = (Person) input.readObject(); 
     text(myPersonObject.a,150,150); 
    } catch (OptionalDataException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (ClassNotFoundException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    try { 
     input.close(); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

e per la lettura :::

if(mousePressed) 

{ 
    Person myPersonObject = new Person(); 
    myPersonObject.a=432; 
    String filename = "testFilemost.srl"; 
    ObjectOutput out = null; 

    try { 
     out = new ObjectOutputStream(new FileOutputStream(new File(getFilesDir(),"")+File.separator+filename)); 
    } catch (FileNotFoundException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    try { 
     out.writeObject(myPersonObject); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    try { 
     out.close(); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
} 
+0

non si dispone di file in file system. Prima crea un file e poi aprilo. – Ashwani

risposta

14

Non è necessario utilizzare l'approccio 'array di byte'. C'è un modo semplice per (de) serializzare oggetti.

EDIT: ecco la lunga versione di codice

Leggi:

public void read(){ 
    ObjectInputStream input; 
    String filename = "testFilemost.srl"; 

    try { 
     input = new ObjectInputStream(new FileInputStream(new File(new File(getFilesDir(),"")+File.separator+filename))); 
     Person myPersonObject = (Person) input.readObject(); 
     Log.v("serialization","Person a="+myPersonObject.getA()); 
     input.close(); 
    } catch (StreamCorruptedException e) { 
     e.printStackTrace(); 
    } catch (FileNotFoundException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } catch (ClassNotFoundException e) { 
     e.printStackTrace(); 
    } 

} 

scrittura:

public void write(){ 
    Person myPersonObject = new Person(); 
    myPersonObject.setA(432); 
    String filename = "testFilemost.srl"; 
    ObjectOutput out = null; 

    try { 
     out = new ObjectOutputStream(new FileOutputStream(new File(getFilesDir(),"")+File.separator+filename)); 
     out.writeObject(myPersonObject); 
     out.close(); 
    } catch (FileNotFoundException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 

classe Persona:

public class Person implements Serializable { 
    private static final long serialVersionUID = -29238982928391L; 
    int a; 

    public int getA(){ 
     return a; 
    } 

    public void setA(int newA){ 
     a = newA; 
    } 
} 
+0

ho solo bisogno di memorizzarlo nella directory interna. –

+0

vedi risposta aggiornata – growic

+0

Devi solo usare getFilesDir() invece di Environment.getExternalStorageDirectory() – growic

0

FileNotFoundException durante la creazione di un nuovo FileOutputStream significa che una delle directory intermedie non esisteva. Prova

file.getParentFile().mkdirs(); 

prima di creare il FileOutputStream.