1. 程式人生 > >Java檔案有話說

Java檔案有話說

各種程式語言對檔案的基本操作都是:

  1. 建立/刪除檔案
  2. 讀寫改檔案的內容
  3. 按要求篩選檔名/檔案內容
  4. 配置檔案的使用

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配置檔案的讀取與寫入。