![](/img/trans.png)
[英]Java - Read mixed data types from a file (char + int + binary)
[英]How do I read data from a binary file into an array with different file types in a field? Java
我已經嘗試了大約一百種不同的方法,但它們似乎都不起作用。 我試圖從一個二進制文件中獲取數據,我在其中輸入了數據,並將其放入一個數組中:一個字符串、整數、整數、整數、雙精度,所有這些都存儲在一個對象中。 更具體地說,我的數組 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);
}
這是我當前的 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);
}
有任何想法嗎? 只是為了說明數據應該如何流動,它是:打開程序>打開文件>將數據從單獨的JFrame窗口放入數組>關閉文件>關閉程序>打開程序,新數組>用文件中的數據填充新數組> 繼續從上次中斷的地方輸入數據
您需要在循環之前初始化x = 0
,而不是在循環內部,並在循環底部增加它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.