2013-12-13 71 views
-2

我保存了一個包含3個陣列(1個String和2個Double)的序列化String陣列的文件。讀取序列化陣列陣列

我該如何讀取它並重做3個數組?

我是這樣寫的:

String[] storeAllArrays[] = {prod, cant, pret}; 

    ObjectOutputStream out; 
    try { 
     out = new ObjectOutputStream(new FileOutputStream("test.ser")); 
     out.writeObject(storeAllArrays); 
     out.flush(); 
     out.close(); 
    } catch (FileNotFoundException ex) { 
     Logger.getLogger(Test2.class.getName()).log(Level.SEVERE, null, ex); 
    } catch (IOException ex) { 
     Logger.getLogger(Test2.class.getName()).log(Level.SEVERE, null, ex); 
    } 

編輯:這裏是我的嘗試:

try { 
     ObjectInputStream in = new ObjectInputStream(new FileInputStream("test.ser")); 
    String[] arrayT = (String[]) in.readObject(); 
     in.close(); 
     JOptionPane.showMessageDialog(this, ArrayT); 
    } catch (IOException ex) { 
     Logger.getLogger(Test2.class.getName()).log(Level.SEVERE, null, ex); 
    } catch (ClassNotFoundException ex) { 
     Logger.getLogger(Test2.class.getName()).log(Level.SEVERE, null, ex); 
    } 
+1

1)你嘗試過什麼? ](http://www.whathaveyoutried.com/)我的意思是*除了*問我們。 2)爲了更快地獲得更好的幫助,請發佈[SSCCE](http://sscce.org/)。 –

+2

幾乎相同,但用ObjectInputStream而不是ObjectOutputStream。 – m0skit0

+1

它應該是'JOptionPane.showMessageDialog(this,arrayT);' – kukido

回答

1

序列化和反序列化的簡單例子

String[] prod = { "pr", "od" }; 
    String[] cant = { "10.0", "20.0" }; 
    String[] pret = { "30.0", "40.0" }; 
    String[] storeAllArrays[] = {prod, cant, pret}; 

    Logger logger = Logger.getLogger(SerializerSample.class.getName()); 
    String serializedPath = "/tmp/store_test.ser"; 

    ObjectOutputStream out; 
    try { 
     out = new ObjectOutputStream(new FileOutputStream(serializedPath)); 
     out.writeObject(storeAllArrays); 
     out.flush(); 
     out.close(); 
    } catch (FileNotFoundException ex) { 
     logger.log(Level.SEVERE, null, ex); 
    } catch (IOException ex) { 
     logger.log(Level.SEVERE, null, ex); 
    } 

    try { 
     InputStream file = new FileInputStream(serializedPath); 
     InputStream buffer = new BufferedInputStream(file); 
     ObjectInput input = new ObjectInputStream(buffer); 

     String[] storeAllArraysREAD[] = (String[][]) input.readObject(); 
     logger.log(Level.INFO, storeAllArraysREAD.toString()); 

    } catch (ClassNotFoundException ex) { 
     logger.log(Level.SEVERE, "Cannot perform input. Class not found.", 
       ex); 
    } catch (IOException ex) { 
     logger.log(Level.SEVERE, "Cannot perform input.", ex); 
    } 
1

我會寫String和兩個雙打,作爲一個字符串和兩個雙打。

DataOutputStream dos = new DataOutputStream(new FileOutputStream("test.data")); 
dos.writeUTF(prod); 
dos.writeDouble(cant); 
dos.writeDouble(pret); 
dos.close(); 

閱讀

DataInputStream dis = new DataInputStream(new FileInputStream("test.data")); 
prod = dis.readUTF(); 
cant = dis.readDouble(); 
pret = dis.readDouble(); 
dis.close(); 

如果必須使用的ObjectOutputStream可以使用ObjectInputStream的

ObjectInputStream ois = new ObjectInputStream(new FileInputStream("test.data")); 
String[] array = (String[]) dis.readObject(); 
dis.close(); 
0

你聽說過的ObjectInputStream?它用於讀取使用ObjectOutputStream創建的文件。您構建一個這樣的:

ObjectInputStream ois = new ObjectInputStream(new FileInputStream("test.ser")); 

然後你可以看你的陣列,像這樣:

Object[] array = (Object[]) ois.readObject();