工作也有一年左右了,發現io的使用還是很多的,主要是配置檔案比較多。雖然理解起來並不複雜,看看原始碼看看api重新寫乙個自己需要的也要不了多少時間,權且記下,給自己新增一點印象也給初學者多一點學習資料吧。
以property檔案為例
1.檔案讀
檔案讀取用到inputstream這個抽象類,它是位元組輸入流的所有類的超類,類很簡單沒有幾個方法,值得一提的是有好幾個類擴充套件了這個類,是學習裝飾著模式好例子。
public void read(string resourcepath) throws filenotfoundexception catch (ioexception e)
show(properties);
} public void show(properties properties)
}
上面的properties 類是資源檔案總是使用的類,api上這個解釋的:
properties
類表示了乙個持久的屬性集。properties
可儲存在流中或從流中載入。屬性列表中每個鍵及其對應值都是乙個字串。
乙個屬性列表可包含另乙個屬性列表作為它的「預設值」;如果未能在原有的屬性列表中搜尋到屬性鍵,則搜尋第二個屬性列表。
以鍵值對的形式儲存資料,此類繼承自hashtable.
2.檔案寫
檔案寫需要用到outputstream 這個類,同樣它也是個抽象類,和inputstream類一樣也被擴充套件。我喜歡用filewriter,他們之間的區別是乙個是以字元的形式(filewriter)乙個是以位元組形式(fileoutputstream)進行處理.
public void write(string resourcepath) catch (exception e)
}
filewriter構造方法有個boolean型別的引數,這個引數用的比較多,表示是否以追加的方式往檔案中寫資料。
properties類中提供了我們在寫程式中比較常見的一些方法。
現在比如我要滿足乙個需求:往資源檔案中存資料如果有這個key了就修改key 對應的值,否則插入乙個新的。
/**
* 判斷是否有相應的key如果有就刪除,然後新增
* * @throws exception
*/public void syhneed() throws exception
properties.remove("name");// 如果有了就刪除
} properties.setproperty(key, value);
filewriter fw;
fw = new filewriter(new file("src/" + filename));// 不能是追加的方式了。
properties.store(fw, null); // 存起來
fw.flush();
fw.close();
}
看看是不是滿足要求了,呵呵。
小插曲:
個人比較得瑟,讀檔案的時候用了
inputstream datastream = this.getclass().getclassloader()
.getresourceasstream(resourcepath);
來得到檔案流,ok,src目錄下也有這個檔案讀出來沒有問題,但是我用檔案修改之後讀取出來卻沒有改變,後面才知道通過這個方式的資料是從記憶體中讀出來的,就算真的修改了,如果記憶體沒有更新取出的資料還是沒有改變的。仔細看了也難怪,這個得到的classloader肯定是記憶體的東東呀。然後得到classloader中的資源必須也是記憶體中的啊。
C 資源檔案
獲取資源檔案 using system using system.collections.generic using system.componentmodel using system.data using system.drawing using system.text using system...
rc資源檔案
resource complier 中詳細描述了資源檔案的編寫與使用.包括巨集的使用.舉例 在debug模式下包含乙個debugdll,在release 模式下包含另乙個releasedll ifdef debug dictionaryonlinedll.dll data debug diction...
操作資源檔案
二 visual c 如何建立資源檔案 resourcewriter rw new resourcewriter my.resources rw.generate 產生乙個名稱為 my.resources 的資源檔案。三 在資源檔案中新增資源 1 加入位元組陣列,語法格式為 public void ...