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

如何将二进制文件中的数据读取到字段中具有不同文件类型的数组中?JAVA,java,arrays,binaryfiles,Java,Arrays,Binaryfiles,我试过大约一百种不同的方法,但似乎都不管用。我试图从一个二进制文件中获取数据,我在其中输入了数据,并将其放入一个数组中:一个字符串,Int,Int,Int,Double,都存储在一个对象中。更具体地说,我的数组toolArray[]保存由toolName、toolID、toolQuality、toolNumberInStock和toolPrice组成的对象ToolItem 我可以很好地将数据写入二进制文件,但是如果用户退出程序并希望稍后回来用先前输入的数据(来自二进制顺序.dat文件)再次填充数

我试过大约一百种不同的方法,但似乎都不管用。我试图从一个二进制文件中获取数据,我在其中输入了数据,并将其放入一个数组中:一个字符串,Int,Int,Int,Double,都存储在一个对象中。更具体地说,我的数组toolArray[]保存由toolName、toolID、toolQuality、toolNumberInStock和toolPrice组成的对象ToolItem

我可以很好地将数据写入二进制文件,但是如果用户退出程序并希望稍后回来用先前输入的数据(来自二进制顺序.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);
     }
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);
     } 
有什么想法吗?就数据应该如何流动而言,它是:
打开程序>打开文件>从单独的JFrame窗口将数据放入数组>关闭文件>关闭程序>打开程序,刷新数组>使用文件中的数据填充新数组>从上次停止的位置继续输入数据

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

“遇到问题”不是一个问题描述。快速浏览一下,您的I/O代码看起来很正常。当然,您需要在循环之前初始化
x
,并在循环结束时增加它。是的,我现在意识到我把它搞砸了,但仍然没有修复它。代码没有正确读取或插入到数组中,这也不是问题描述。再试一次。你会接受客户的问题报告吗?问题是当我关闭程序,用二进制文件中以前的数据重新填充数组时,它会保持数字正确,但toolName变为空。代码中的某些内容会阻止名称被读取,但只要我不退出程序,整个过程都会正常进行。“变为null”与您在此处发布的任何内容一样,都不是一个问题描述,并且此代码中没有
toolName
变量。