java讀寫資料總結
阿新 • • 發佈:2019-01-02
對於資料的讀寫java提供了專門的讀寫流DataInputStream和DataOutputStream形式進行讀寫,可以進行各種基本資料型別和字串以及UTF格式的陣列或者單個元素的讀寫。
------------------------------------------------------------------------------------
以陣列讀寫為例進行演示:
File file = new File("d:/data/word.txt");
FileOutputStream fo = new FileOutputStream(file);
DataOutputStream dfo = new DataOutputStream(fo);
double[] a = {1234,24324,234324,3412,3244,56667};
//採用迴圈遍歷方式寫入檔案
for(int i = 0; i < a.length; i++) {
dfo.writeDouble(a[i]);
}
讀取的時候同樣採用迴圈遍歷的方式進行讀取。需要注意陣列長度,可以小於等於輸出的陣列長度,但是不能超過,否則會報錯,因為readDouble的返回值是讀取的數值,如果讀取不到,就會丟擲異常。
double[] a2 = new double[2];
for(int i = 0; i < a2.length; i++) {
a2[i] = dfin.readDouble();
}
此外java還有物件操作的流ObjectInputStream/ObjectOutputStream,如果將陣列作為物件,可以直接進行輸入輸出。但是取出陣列時,長度不受定義影響,會根據輸入物件進讀入。
File file = new File("d:/data/word.txt");
FileOutputStream fo = new FileOutputStream(file);
ObjectOutputStream ofo = new ObjectOutputStream(fo);
ofo.writeObject(a);
double[] b = new double[2];
b = (double[]) ofin.readObject();
System.out.println(Arrays.toString(a));
System.out.println(Arrays.toString(b));
------------------結果-------------------------------
[1234.0, 24324.0, 234324.0, 3412.0, 3244.0, 56667.0]
[1234.0, 24324.0, 234324.0, 3412.0, 3244.0, 56667.0]
二維陣列的考慮,對於DataInputStream和DataOutputStream來說,需要熟知輸出陣列的二個維度,然後根據維度進行雙重迴圈遍歷讀取資料。
對於ObjectInputStream/ObjectOutputStream
定義陣列:double[][] a = {{1,2},{3,4},{5,6}};
ofo.writeObject(a);
double[][] b = new double[1][1];
b = (double[][]) ofin.readObject();
for(int i = 0; i < a.length; i ++) {
System.out.println(Arrays.toString(a[i]));
System.out.println(Arrays.toString(b[i]));
}
-----------結果--------------------
[1.0, 2.0]
[1.0, 2.0]
[3.0, 4.0]
[3.0, 4.0]
[5.0, 6.0]
[5.0, 6.0]