Java編程之文件讀寫(xiě)實(shí)例詳解
本文實(shí)例講述了Java編程中文件讀寫(xiě)的方法。分享給大家供大家參考,具體如下:
Java中文件讀寫(xiě)操作的作用是什么?
回答這個(gè)問(wèn)題時(shí)應(yīng)該先想到的是Java只是一門(mén)語(yǔ)言,我們的一種使用工具而已,這樣答案就明晰了,就是將外來(lái)的各種數(shù)據(jù)寫(xiě)入到某一個(gè)文件中去,用以保存下來(lái);或者從文件中將其數(shù)據(jù)讀取出來(lái),供我們使用。就如下電影過(guò)程,從網(wǎng)絡(luò)資源中下載一部電影保存于你電腦中(寫(xiě)文件),當(dāng)你想看的時(shí)候就用播放器打開(kāi)(讀文件)。
Java中如何對(duì)文件進(jìn)行讀寫(xiě)操作?
先理一理,Java中的流分兩種,字節(jié)流和字符流,其中字節(jié)流的兩個(gè)基類(lèi)是InputStream和OutputStream;字符流的兩個(gè)基類(lèi)是Reader和Writer。所謂文件流,即我們對(duì)文件的操作留不開(kāi)流。由此可知我們要用到某個(gè)類(lèi)必然繼承如上的四個(gè)基類(lèi)之一。Java中一切都是類(lèi),一切都是對(duì)象。自然會(huì)想到文件操作有哪些類(lèi):
如下四個(gè)直接用到的類(lèi):
字節(jié)流中:FileInputStream和FileOutputStream
字符流中:FileReader和FileWriter
找到類(lèi)就好辦事了。剩下來(lái)的就是去找實(shí)現(xiàn)方法啦。
兩種選擇方案在這里,這就牽涉到我們?nèi)绾芜x擇合適的文件讀寫(xiě)方式呢?
選擇條件的區(qū)別:
以字節(jié)為單位讀取文件,常用于讀二進(jìn)制文件,如圖片、聲音、影像等文件。
以字符為單位讀取文件,常用于讀文本,數(shù)字等類(lèi)型的文件.
至于是否選擇用Buffer來(lái)對(duì)文件輸入輸出流進(jìn)行封裝,就要看文件的大小,若是大文件的讀寫(xiě),則選擇Buffer這個(gè)桶來(lái)提供文件讀寫(xiě)效率。
如下是簡(jiǎn)單運(yùn)用實(shí)例:
1、運(yùn)用字節(jié)流對(duì)文件進(jìn)行直接讀寫(xiě):
注:FileOutputStream(file, true);里面true參數(shù)表示不覆蓋原文件,直接在文件后面追加添加內(nèi)容。
public class FileTest { static File file = new File("d:/test.txt"); public static void main(String[] args) { try { FileOutputStream out = new FileOutputStream(file, true); String s = "Hello,world!\r\n"; out.write(s.getBytes()); out.flush(); out.close(); //FileInputStream in = new FileInputStream(file); //byte [] b = new byte[20]; //in.read(b, 0, b.length); //System.out.println(new String(b)); //in.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }
2、運(yùn)用字符流對(duì)文件進(jìn)行直接讀寫(xiě):
public class File03 { static File file = new File("d:/test.txt"); public static void main(String[] args) { try { FileWriter fw = new FileWriter(file,true); fw.write("Hello,world!\r\n"); fw.flush(); fw.close(); //FileReader fr = new FileReader(file); //int i=0; //String s =""; //while( ( i = fr.read() )!= -1) //{ // s = s +(char)i; //} //System.out.println(s); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }
文件讀寫(xiě)流用Buffer封裝之后的運(yùn)用:
1、對(duì)字節(jié)流封裝后對(duì)文件進(jìn)行讀寫(xiě):
static File file = new File("d:/test.txt"); public static void main(String[] args) { try { // FileOutputStream out = new FileOutputStream(file, true); // BufferedOutputStream bout = new BufferedOutputStream(out); // String s = "I have a dream!"; // bout.write(s.getBytes()); // bout.flush(); // bout.close(); FileInputStream in = new FileInputStream(file); BufferedInputStream bin = new BufferedInputStream(in); byte[] b = new byte[15]; bin.read(b); bin.close(); System.out.println(new String(b)); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }
2、對(duì)字符流封裝后對(duì)文件進(jìn)行讀寫(xiě):
public class File03 { static File file = new File("d:/test.txt"); public static void main(String[] args) { try { // FileWriter fw = new FileWriter(file, true); // BufferedWriter bw = new BufferedWriter(fw); // String nextLine = System.getProperty("line.separator"); // bw.write("Hello,world!" + nextLine); // bw.flush(); // bw.close(); FileReader fr = new FileReader(file); BufferedReader br = new BufferedReader(fr); int i = 0; String s = ""; String temp = null; while((temp=br.readLine())!=null) { s = s+temp; } System.out.println(s); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }
希望本文所述對(duì)大家Java程序設(shè)計(jì)有所幫助。
相關(guān)文章
DoytoQuery中關(guān)于N+1查詢(xún)問(wèn)題解決方案詳解
這篇文章主要為大家介紹了DoytoQuery中關(guān)于N+1查詢(xún)問(wèn)題解決方案詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-12-12java 實(shí)現(xiàn)最小二叉樹(shù)堆排序的實(shí)例
這篇文章主要介紹了java 實(shí)現(xiàn)最小二叉樹(shù)堆排序的實(shí)例的相關(guān)資料,希望通過(guò)本文能幫助到大家,需要的朋友可以參考下2017-09-09基于Restful接口調(diào)用方法總結(jié)(超詳細(xì))
下面小編就為大家?guī)?lái)一篇基于Restful接口調(diào)用方法總結(jié)(超詳細(xì))。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-08-08Java實(shí)現(xiàn)任務(wù)超時(shí)處理方法
任務(wù)超時(shí)處理是比較常見(jiàn)的需求,Java中對(duì)超時(shí)任務(wù)的處理有兩種方式,在文中給大家詳細(xì)介紹,本文重點(diǎn)給大家介紹Java實(shí)現(xiàn)任務(wù)超時(shí)處理方法,需要的朋友可以參考下2019-06-06Spring基于Aop實(shí)現(xiàn)事務(wù)管理流程詳細(xì)講解
這篇文章主要介紹了Spring基于Aop實(shí)現(xiàn)事務(wù)管理流程,事務(wù)管理對(duì)于企業(yè)應(yīng)用來(lái)說(shuō)是至關(guān)重要的,即使出現(xiàn)異常情況,它也可以保證數(shù)據(jù)的一致性,感興趣想要詳細(xì)了解可以參考下文2023-05-05springboot?maven?plugin報(bào)紅的解決辦法
本文主要介紹了springboot?maven?plugin報(bào)紅的解決辦法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-07-07java實(shí)現(xiàn)手機(jī)短信驗(yàn)證的基本思路
這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)手機(jī)短信驗(yàn)證的基本思路,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-11-11