//將一定格式的資料寫入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; } } |