java讀寫ini文件、FileOutputStream問題
java讀寫ini文件、FileOutputStream
在上課讓學生練習文件讀寫,就讓他們做了一個使用文件保存賬號和密碼的練習,有一個比較愛學的學生就用到了了.ini文件,也就是我們所說的配置文件來保存賬號密碼(學生很聰明,知道用鍵值對的方式保存密碼,作為老師的我很汗顏?。。。。覜]仔細想就說你是不是進行了多次字符串分割來獲取信息的,他說不是,只需要加幾步代碼就可以了。當時沒細想說做出來就好……
后來我越想越不對,就回辦公室自己寫了一下,發(fā)現(xiàn)還是有很多問題的。
在查看文檔的情況下,知道要讀取類似于鍵值對的文件,java已經(jīng)給我提供了一個叫 Properties的類,簡單如下:
File file = new File("../JavaPractice/a.txt");
try {
FileInputStream inputStream = new FileInputStream(file);
Properties properties = new Properties();
properties.load(inputStream);//把文件中的內(nèi)容放在流里面
properties.list(System.out);//通過這個方法把內(nèi)容打印出來
inputStream.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}打印如下:
-- listing properties --
a=b
12=222
asdasd1=asd111122
12123=123222
如果要直接使用鍵得到值得代碼如下:
File file = new File("../JavaPractice/a.txt");
try {
FileInputStream inputStream = new FileInputStream(file);
Properties properties = new Properties();
properties.load(inputStream);//把文件中的內(nèi)容放在流里面
// properties.list(System.out);//通過這個方法把內(nèi)容打印出來
System.out.println(properties.get("a"));//通過get方法得到對應值
System.out.println(properties.get("0"));//如果沒有對應的值就為null
inputStream.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}打印結(jié)果:
b
null
使用properties.set()方法存值
File file = new File("../JavaPractice/a.txt");
try {
FileInputStream inputStream = new FileInputStream(file);
Properties properties = new Properties();
properties.load(inputStream);//把文件中的內(nèi)容放在流里面
// properties.list(System.out);//通過這個方法把內(nèi)容打印出來
System.out.println(properties.get("a"));//通過get方法得到對應值
System.out.println(properties.get("0"));//如果沒有對應的值就為null
properties.setProperty("java", "love java");//使用此方法存值
inputStream.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} 我以為就這樣就存進去,滿懷欣喜的打開文件,發(fā)現(xiàn)并沒有真正的存入值,但是我又試著使用properties.get()方法,卻能得到我放進去的值,很是疑惑,只得再次看api。
File file = new File("../JavaPractice/a.txt");
try {
FileInputStream inputStream = new FileInputStream(file);
Properties properties = new Properties();
properties.load(inputStream);//把文件中的內(nèi)容放在流里面
// properties.list(System.out);//通過這個方法把內(nèi)容打印出來
System.out.println(properties.get("a"));//通過get方法得到對應值
System.out.println(properties.get("0"));//如果沒有對應的值就為null
properties.setProperty("java", "love java");//使用此方法存值
FileOutputStream outputStream = new FileOutputStream(file);
properties.store(outputStream, null);//只有調(diào)用這個方法才能寫進文件,因為前面set方法只是寫在流里面,直到調(diào)用這個方法才真正的寫入文件里。
inputStream.close();
outputStream.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}new FileOutputStream 的位置有關(guān)系嗎?
如果把FileOutputStream outputStream = new FileOutputStream(file);放在load前面,那么文件里面所有的信息都會被覆蓋,放在load后面就不會了,因為load后就保存在一個流里面。
因為FileOutputStream outputStream = new FileOutputStream(file);就默認覆蓋文件,直接是文件為空,除非FileOutputStream outputStream = new FileOutputStream(file,true);,所有有的時候初學者會把這些東西搞混淆,最后怎么出錯也不知道。(汗顏?。?!我也出過這個錯誤……)
最后細心的朋友可能會發(fā)現(xiàn)我并不是.ini文件,對的,我發(fā)現(xiàn)并不是只有ini文件才能做這樣的操作,所以我就多試驗了下。

總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Spring Cloud之遠程調(diào)用OpenFeign參數(shù)傳遞
本文介紹了Spring Cloud中使用OpenFeign進行遠程調(diào)用時,參數(shù)傳遞的不同方式,包括傳遞單個參數(shù)、多個參數(shù)、對象和JSON數(shù)據(jù),感興的朋友一起看看吧2025-03-03
一文教你利用Stream?API批量Mock數(shù)據(jù)的方法
在日常開發(fā)的過程中我們經(jīng)常會遇到需要mock一些數(shù)據(jù)的場景,比如說?mock?一些接口的返回或者說?mock?一些測試消息用于隊列生產(chǎn)者發(fā)送消息。本文將教你如何通過?Stream?API?批量?Mock?數(shù)據(jù),需要的可以參考一下2022-09-09
mybatis foreach遍歷LIST讀到數(shù)據(jù)為null的問題
這篇文章主要介紹了mybatis foreach遍歷LIST讀到數(shù)據(jù)為null的問題,具有很好的參考價值,希望對大家有所幫助。2022-02-02

