java讀寫ini文件、FileOutputStream問題
java讀寫ini文件、FileOutputStream
在上課讓學(xué)生練習(xí)文件讀寫,就讓他們做了一個使用文件保存賬號和密碼的練習(xí),有一個比較愛學(xué)的學(xué)生就用到了了.ini文件,也就是我們所說的配置文件來保存賬號密碼(學(xué)生很聰明,知道用鍵值對的方式保存密碼,作為老師的我很汗顏?。。。。覜]仔細(xì)想就說你是不是進(jìn)行了多次字符串分割來獲取信息的,他說不是,只需要加幾步代碼就可以了。當(dāng)時沒細(xì)想說做出來就好……
后來我越想越不對,就回辦公室自己寫了一下,發(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方法得到對應(yīng)值
System.out.println(properties.get("0"));//如果沒有對應(yīng)的值就為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方法得到對應(yīng)值
System.out.println(properties.get("0"));//如果沒有對應(yīng)的值就為null
properties.setProperty("java", "love java");//使用此方法存值
inputStream.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} 我以為就這樣就存進(jìn)去,滿懷欣喜的打開文件,發(fā)現(xiàn)并沒有真正的存入值,但是我又試著使用properties.get()方法,卻能得到我放進(jìn)去的值,很是疑惑,只得再次看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方法得到對應(yīng)值
System.out.println(properties.get("0"));//如果沒有對應(yīng)的值就為null
properties.setProperty("java", "love java");//使用此方法存值
FileOutputStream outputStream = new FileOutputStream(file);
properties.store(outputStream, null);//只有調(diào)用這個方法才能寫進(jìn)文件,因為前面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);就默認(rèn)覆蓋文件,直接是文件為空,除非FileOutputStream outputStream = new FileOutputStream(file,true);,所有有的時候初學(xué)者會把這些東西搞混淆,最后怎么出錯也不知道。(汗顏?。。∥乙渤鲞^這個錯誤……)
最后細(xì)心的朋友可能會發(fā)現(xiàn)我并不是.ini文件,對的,我發(fā)現(xiàn)并不是只有ini文件才能做這樣的操作,所以我就多試驗了下。

總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Spring Cloud之遠(yuǎn)程調(diào)用OpenFeign參數(shù)傳遞
本文介紹了Spring Cloud中使用OpenFeign進(jìn)行遠(yuǎn)程調(diào)用時,參數(shù)傳遞的不同方式,包括傳遞單個參數(shù)、多個參數(shù)、對象和JSON數(shù)據(jù),感興的朋友一起看看吧2025-03-03
Java基礎(chǔ)學(xué)習(xí)之構(gòu)造方法詳解
這篇文章主要為大家詳細(xì)介紹了Java基礎(chǔ)學(xué)習(xí)中構(gòu)造方法的概述及注意事項,文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)Java有一定幫助,需要的可以參考一下2022-08-08
一文教你利用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
詳解如何配置Spring Batch批處理失敗重試機(jī)制
這篇文章主要來和大家一起探討一下如何在Spring批處理框架中配置重試邏輯,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-06-06

