Java檔案有話說
阿新 • • 發佈:2018-11-08
各種程式語言對檔案的基本操作都是:
- 建立/刪除檔案
- 讀寫改檔案的內容
- 按要求篩選檔名/檔案內容
- 配置檔案的使用
Java語言不同與C++的是java在對檔案的讀寫改操作時必須轉換為byte位元組來存入檔案。通俗的來說就是在java中想要將int、String、double等基本型別/應用型別(物件)存入檔案中,必須先轉換為byte位元組,然後才能呼叫java.io*、java.util*包中的方法等來具體的實現;同樣的從檔案中取出資料也是先對byte操作,從byte中取出響應的位元組來進一步的轉換為我們需要的各種型別。
問:如果我們想將int、String、Students(類物件)存入檔案中,該怎麼辦?
這是就要注意了,因為不同的型別都要先轉換為byte型,然後存入檔案中,但是由於存入的型別各不相同,這就會讓從檔案中取資料變得困難起來,這裡對於字串採用Length + Content編碼,即長度——資料,意思就是在存入String型別前先把String的byte數記錄下來並存入檔案中,這樣從檔案中讀取String時就先讀取位元組數,然後取出響應長度的位元組出來,最後再將byte[ ]轉換為String。
//寫入檔案 byte[ ] buffer=new byte[1024]; ByteBuffer dstbuff=ByteBuffer.wrap(buffer); dstbuff.putInt( ); String str=”你好,中國!”; byte[ ] buf=str.getByte( ); int length=buf.length; dstbuff..putShort((short)length); dstbuff..put(buf); File filename=new File(“e:\\example\\abc.txt”); //並沒有建立File,只是定義了一個filepath FileOutputStream file=new FileOutputStream(filename); file.write(buf); file.close( ); //讀出檔案 byte[ ] buffer=new byte[1024]; File filename=new File(“e:\\example\\abc.txt”); FileInputStream file=new FileInputStream(filename); file.read(buffer); file.close( ); ByteBuffer dstbuff=ByteBuffer.wrap(buffer); int id=dstbuff.getInt( ); short length=dstbuff.getShort( ); byte[ ] buf=new byte[length]; dstbuff.get(buf,0,length); String name=new String(buf,”GBK”);
配置檔案的使用
Eclipse中自帶一個properties的配置檔案,該檔案可以主要形式為:key=data,通過建立一個Properties物件來讀取出來properties檔案中key所對應的data資料。
//config.properties檔案 title=Celsius--and--Fahrenheit range.from=1 range.to=30 //temp.java public class temp { private String title; private int from; private int to; public temp(String title, int from, int to) { this.title = title; this.from = from; this.to= to; } public void display() { // 列印 "攝氏度 - 華氏度" 轉換表 System.out.println(title); for(float c= from; c<=to; c+=1) { float f = 32 + c * 9 / 5; String line = String.format("%.0f - %.1f", c, f); System.out.println(line);; } } } //hello.java import java.util.Properties; import java.io.IOException; import java.io.InputStream; public class Hello { public static void main(String[] args) { // TODO Auto-generated method stub Properties proper=new Properties(); try { //查詢並讀取properties配置檔案 InputStream file=Hello.class.getResourceAsStream("/config.properties"); proper.load(file); //將配置檔案讀取到Properties物件中來 file.close(); } catch (IOException e) { // TODO Auto-generated catch block System.out.println("InputStream load is false!"); } //取出key——>data String title=proper.getProperty("title"); String From=proper.getProperty("range.from", "1"); String To=proper.getProperty("range.to", "50"); int from=Integer.valueOf(From); int to=Integer.valueOf(To); temp ex=new temp(title,from,to); ex.display(); } }
當然更為廣泛應用的配置檔案還是xml配置檔案了,java中含有呼叫xml檔案的包,利用這些包可以實現對xml檔案中的<root>下的子元素<child>的讀取了。在這裡就不做介紹了,之後會繼續更新xml配置檔案的讀取與寫入。