java讀寫ini文件、FileOutputStream問題
java讀寫ini文件、FileOutputStream
在上課讓學(xué)生練習(xí)文件讀寫,就讓他們做了一個使用文件保存賬號和密碼的練習(xí),有一個比較愛學(xué)的學(xué)生就用到了了.ini文件,也就是我們所說的配置文件來保存賬號密碼(學(xué)生很聰明,知道用鍵值對的方式保存密碼,作為老師的我很汗顏啊?。。。?,我沒仔細想就說你是不是進行了多次字符串分割來獲取信息的,他說不是,只需要加幾步代碼就可以了。當(dāng)時沒細想說做出來就好……
后來我越想越不對,就回辦公室自己寫了一下,發(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(); }
我以為就這樣就存進去,滿懷欣喜的打開文件,發(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方法得到對應(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)用這個方法才能寫進文件,因為前面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);,所有有的時候初學(xué)者會把這些東西搞混淆,最后怎么出錯也不知道。(汗顏?。?!我也出過這個錯誤……)
最后細心的朋友可能會發(fā)現(xiàn)我并不是.ini文件,對的,我發(fā)現(xiàn)并不是只有ini文件才能做這樣的操作,所以我就多試驗了下。
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
解決MyEclipse中Maven設(shè)置jdk版本jdk1.8報錯問題
今天安裝了jdk1.8、tomcat8、和maven3.5.2,弄好后在myeclipse新建了一個maven項目,項目默認是jdk1.5,改成jdk1.8后項目報錯2018-10-10Spring結(jié)合WebSocket實現(xiàn)實時通信的教程詳解
WebSocket?是基于TCP/IP協(xié)議,獨立于HTTP協(xié)議的通信協(xié)議,本文將使用Spring結(jié)合WebSocket實現(xiàn)實時通信功能,有需要的小伙伴可以參考一下2024-01-01chatgpt java環(huán)境調(diào)用源碼實現(xiàn)demo
這篇文章主要介紹了chatgpt java環(huán)境調(diào)用源碼實現(xiàn)demo,本文結(jié)合實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-02-02詳解如何用SpringBoot 2.3.0.M1創(chuàng)建Docker映像
這篇文章主要介紹了詳解如何用SpringBoot 2.3.0.M1創(chuàng)建Docker映像,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-05-05