2016-11-30 58 views
0

我试图做的确切的事情是一个叫NUM二维数组保存到一个名为savedNumbers.data文件I/O。这里是保存到.data文件的代码:爪哇 - 具体文件,对象

private void saveBtnActionPerformed(java.awt.event.ActionEvent evt) { 

    num[0][0] = Integer.parseInt(line00Tf.getText()); 
    num[0][1] = Integer.parseInt(line01Tf.getText()); 
    num[0][2] = Integer.parseInt(line02Tf.getText()); 
    num[0][3] = Integer.parseInt(line03Tf.getText()); 
    num[0][4] = Integer.parseInt(line04Tf.getText()); 
    num[1][0] = Integer.parseInt(line10Tf.getText()); 
    num[1][1] = Integer.parseInt(line11Tf.getText()); 
    num[1][2] = Integer.parseInt(line12Tf.getText()); 
    num[1][3] = Integer.parseInt(line13Tf.getText()); 
    num[1][4] = Integer.parseInt(line14Tf.getText()); 
    num[2][0] = Integer.parseInt(line20Tf.getText()); 
    num[2][1] = Integer.parseInt(line21Tf.getText()); 
    num[2][2] = Integer.parseInt(line22Tf.getText()); 
    num[2][3] = Integer.parseInt(line23Tf.getText()); 
    num[2][4] = Integer.parseInt(line24Tf.getText()); 

    File outFile; 
    FileOutputStream fStream; 
    ObjectOutputStream oStream; 

    try { 
     outFile = new File("savedNumbers.data"); 
     fStream = new FileOutputStream(outFile); 
     oStream = new ObjectOutputStream(fStream); 

     oStream.writeObject(num[0]); 
     oStream.writeObject(num[1]); 
     oStream.writeObject(num[2]); 

     JOptionPane.showMessageDialog(null, "File saved OK"); 

     oStream.close(); 

    } catch (IOException e) { 
     System.out.println("Error writing to file: " + e); 
    } 
} 

该代码似乎运行良好。

现在我想在JOptionPane中一次查看所有相同的数字,所以会显示三行保存的数字,然后按下OK,另外三行保存的数字将显示,直到没有更多。我有从savednumbers.data 调用数问题

下面是该代码:

 //CODE FOR CALLING num FROM savedNums.data 

    private void showSavedNumsBtnActionPerformed(java.awt.event.ActionEvent evt) {     

    File inFile; 
    FileInputStream fStream; 
    ObjectInputStream oStream; 

    try{ 
     inFile = new File("savedNumbers.data"); 
     fStream = new FileInputStream(inFile); 
     oStream = new ObjectInputStream(fStream); 

     ArrayList <LottoPhase1> numList; 
     numList = (ArrayList<LottoPhase1>)oStream.readObject(); //THIS LINE HAVING PROBLEMS WITH 

     for(LottoPhase1 ph1:numList){ 

      JOptionPane.showMessageDialog(null, 
       "Saved numbers " + 
       "Numbers: " + Arrays.toString(ph1.getNum()) 
      ); 
     } 
     oStream.close(); 
    } 
    catch(IOException | ClassNotFoundException e){ 
     JOptionPane.showMessageDialog(null, "Error: " + e); 
    } 

我也打过电话ArrayList中NUM,numList,ALIST和既不工作。 类LottoPhase1被创建并没有错误运行,并且完全调试。

回答

1

你正在写阵列添加到文件,而不是ArrayList的(一个或多个)。这会不会让你从文件中投(ArrayList的)回来,因为ObjectOutputStream保存与对象的对象的类名,使其能够与ObjectInputStream

反序列化,我建议要么改变对象的数据类型您正在将该文件写入为ArrayList,或者将要将文件中的数据存储到的对象的数据类型更改为Array。