如何将二进制文件中的数据读入字段中具有不同文件类型的数组中? Java的

时间:2016-04-03 06:17:55

标签: java arrays binaryfiles

我尝试了大约一百种不同的方法,但似乎没有一种方法可行。我试图从二进制文件中获取数据,我在其中输入数据,并将其放入一个数组中:String,Int,Int,Int,Double,都存储在一个对象中。更具体地说,我的数组toolArray []包含对象ToolItem,它包含toolName,toolID,toolQuality,toolNumberInStock和toolPrice。

我可以很好地将数据写入二进制文件,但是我很难将它取出并放回到数组中,因为如果用户退出程序并希望稍后再回来填充再次使用先前输入的数据(来自二进制顺序.dat文件)。

这就是我投入数据的方式:

try
     {           
        FileOutputStream fout = new FileOutputStream("myfile.dat");
        DataOutputStream out = new DataOutputStream(fout);

        System.out.println("Writing array into myfile");
        System.out.println(tools.toolArray[0].getName());
        System.out.println(tools.numberOfItems);

        for(int i=0; i<=tools.numberOfItems-1; i++)
        {
           System.out.println("Printing " + tools.toolArray[i].getName());
           out.writeUTF(tools.toolArray[i].getName());

           System.out.println("Printing " + tools.toolArray[i].getID());
           out.writeInt(tools.toolArray[i].getID());

           System.out.println("Printing " +          tools.toolArray[i].getQuality());
           out.writeInt(tools.toolArray[i].getQuality());

           System.out.println("Printing "+tools.toolArray[i].getNumberInStock());
           out.writeInt(tools.toolArray[i].getNumberInStock());

           System.out.println("Printing " + tools.toolArray[i].getPrice());
           out.writeDouble(tools.toolArray[i].getPrice());

        }

  System.out.println("Done");

  out.close();
  fout.close(); 
     }
    catch ( IOException ioe)
     {
        JOptionPane.showMessageDialog(this, ioe.toString(), "Error", JOptionPane.ERROR_MESSAGE);
        System.exit(1);
     }

这是我当前的read()代码段,它没有正确获取数据:

try{
        FileInputStream fin = new FileInputStream("myfile.dat");
        BufferedInputStream bin = new BufferedInputStream(fin);
        DataInputStream din = new DataInputStream(bin);            

        while(true)
       int x = 0;
       {

        System.out.println("Reading...");
           tools.toolArray[x].setName(din.readUTF());
           tools.toolArray[x].setID(din.readInt());
           tools.toolArray[x].setQuality(din.readInt());
           tools.toolArray[x].setNumberInStock(din.readInt());
           tools.toolArray[x].setPrice(din.readDouble());
         System.out.println(tools.toolArray[x].getName()+tools.toolArray[x].getID()+
         tools.toolArray[x].getQuality()+tools.toolArray[x].getNumberInStock()+tools.toolArray[x].getPrice());
     x++;
      }

     }
     catch(EOFException eofe)
     {
        System.out.println("File read");
     }
    catch ( IOException ioe)
     {
        JOptionPane.showMessageDialog(this, ioe.toString(), "Error, cannot read from file", JOptionPane.ERROR_MESSAGE);
        System.exit(1);
     } 

有什么想法吗?只是为了了解数据的流动方式,它是: 打开程序&gt;打开文件&gt;将数据从单独的JFrame窗口放入数组中&gt;关闭文件&gt;关闭计划&gt;开放式程序,新阵列&gt;用文件&gt;中的数据填充新数组继续从上次离开的地方输入数据

1 个答案:

答案 0 :(得分:0)

你需要在循环之前初始化x = 0,而不是在循环内部,并在循环的底部递增它。