|
//將一定格式的資料寫入test.my檔案中。
//MyData.java
/**
* 類比要儲存到檔案中的資料
* 該類中儲存4種類型的資料
*/
public class MyData {
boolean b;
int n;
String s;
short sh[];
public MyData(){}
public MyData(boolean b,int n,String s,short sh[]){
this.b = b;
this.n = n;
this.s = s;
this.sh = sh;
}
}
//WriteFileUseDataStream.java
import java.io.DataOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
/**
* 使用DataOutputStream書寫具有一定格式的檔案
*/
public class WriteFileUseDataStream {
public static void main(String[] args){
short[] sh = {1,3,134,12};
MyData data = new MyData(true,100,"Java語言",sh);
//寫入檔案
writeFile(data);
}
/**
* 將MyData對象按照一定格式寫入檔案中
* @param data 資料對象
*/
public static void writeFile(MyData data){
FileOutputStream fos = null;
DataOutputStream dos = null;
try{
//建立檔案流
fos = new FileOutputStream("test.my");
//建立資料輸出資料流,流的嵌套
dos = new DataOutputStream(fos);
//依次寫入資料
dos.writeBoolean(data.b);
dos.writeInt(data.n);
dos.writeUTF(data.s);
//寫入數組
int len = data.sh.length;
dos.writeInt(len); //數組長度
//依次寫入每個數組元素
for(int i=0;i<len;++i)
dos.writeShort(data.sh[i]);
}catch(Exception e){
e.printStackTrace();
}finally{
try {
dos.close();
fos.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
//ReadFileUseDataStream.java
import java.io.DataInputStream;
import java.io.FileInputStream;
/**
* 使用DataInputStream讀取自訂格式的檔案
*/
public class ReadFileUseDataStream {
public static void main(String[] args) {
MyData data = readFile();
System.out.println(data.b);
System.out.println(data.n);
System.out.println(data.s);
int len = data.sh.length;
for(int i=0;i<len;++i)
System.out.println(data.sh[i]);
}
/**
* 從檔案test.my中讀取資料,並使用讀取到的資料初始化data對象
* @return 讀取到的對象內容
*/
public static MyData readFile(){
MyData data = new MyData();
FileInputStream fis = null;
DataInputStream dis = null;
try{
//建立檔案流
fis = new FileInputStream("test.my");
//建立資料輸入流,流的嵌套
dis = new DataInputStream(fis);
//依次讀取資料,並賦值給data對象
data.b = dis.readBoolean();
data.n = dis.readInt();
data.s = dis.readUTF();
int len = dis.readInt();
data.sh = new short[len];
for(int i=0;i<len;++i)
data.sh[i] = dis.readShort();
}catch(Exception e){
e.printStackTrace();
}finally{
try{
dis.close();
fis.close();
}catch(Exception e){
e.printStackTrace();
}
}
return data;
}
} |