欧美色欧美亚洲高清在线观看,国产特黄特色a级在线视频,国产一区视频一区欧美,亚洲成a 人在线观看中文

  1. <ul id="fwlom"></ul>

    <object id="fwlom"></object>

    <span id="fwlom"></span><dfn id="fwlom"></dfn>

      <object id="fwlom"></object>

      Java實驗五 IO流的一般使用

      時間:2019-05-13 09:32:08下載本文作者:會員上傳
      簡介:寫寫幫文庫小編為你整理了多篇相關(guān)的《Java實驗五 IO流的一般使用》,但愿對你工作學習有幫助,當然你在寫寫幫文庫還可以找到更多《Java實驗五 IO流的一般使用》。

      第一篇:Java實驗五 IO流的一般使用

      Java實驗五IO流的一般使用

      實驗?zāi)康模赫莆瘴募惖氖褂茫私庖话懔鞯幕緫?yīng)用。加深處理代碼的能力。實驗內(nèi)容:

      import java.io.*;

      public class lijun43

      {

      public static void main(String args[])

      {

      File f = new File(“f:mldn.txt”);

      if(f.exists())

      {

      System.out.println(“文件已存在。”);

      }

      else

      {

      System.out.println(“文件不存在”);

      }

      }

      };

      import java.io.*;

      public class lijun45

      {

      public static void main(String args[])

      {

      loop(“d:”);

      }

      public static void loop(String dir)

      {

      File f = new File(dir);

      String str[] = null;

      if(f.isDirectory())

      {

      str = f.list();

      for(int i=0;i

      {

      loop(dir+“”+str[i]);

      }

      }

      else

      {

      System.out.println(dir);

      }

      }

      };

      實驗結(jié)果:

      1f:mldn.txt在f盤中出現(xiàn)了。

      心得體會:

      需要多嘗試,流主要是對文件俠的操作,比如文件俠創(chuàng)建,移動,刪除等,打開一個流,

      第二篇:Java 實驗 文件管理與IO流

      作業(yè)要求:每個題保存為一個.java文件,保存在同一工程文件夾中,文件夾的名字為E:Java你的班級+姓名,例如:E:Java信息11張三。

      注意:上交的程序包含程序的執(zhí)行結(jié)果,以注釋的形式附在程序后面。

      實驗六文件管理與I/O流

      一、實驗?zāi)康?.熟悉用文件File類創(chuàng)建、刪除、查看文件或目錄。

      2.字節(jié)流、字符流、緩沖流、隨機流等流式文件的創(chuàng)建,讀寫操作。

      3.用字符流和緩沖流從鍵盤接受字符串的方法。

      二、實驗內(nèi)容

      1.先運行該程序。源文件是sy6_1.java。然后按【思考問題】分析程序。

      import java.io.*;

      public class sy6_1{

      public static void main(String[] args)throws Exception

      {

      int x=0;

      File Mypath;

      Mypath=new File(“E:aaaa”);

      if(!Mypath.exists())

      {System.out.println(“創(chuàng)建新目錄”);Mypath.mkdir();}

      else System.out.println(“目錄已存在”);

      File Myfile1=new File(Mypath,“myfile1.txt”);

      File Myfile2=new File(Mypath,“myfile2.txt”);

      File Myfile3=new File(Mypath,“myfile3.txt”);

      FileInputStream Fin=new FileInputStream(Myfile1);

      FileOutputStream Fout=new FileOutputStream(Myfile1);

      DataOutputStream Dout=new DataOutputStream(new FileOutputStream(Myfile2));

      DataInputStream Din=new DataInputStream(new FileInputStream(Myfile2));

      PrintWriter PWout=new PrintWriter(new FileWriter(Myfile3));

      RandomAccessFile RAread=new RandomAccessFile(Myfile3,“r”);

      String str;

      int num1;

      BufferedReader buf;//緩沖流

      buf=new BufferedReader(new InputStreamReader(System.in));

      System.out.print(“請輸入一個小于255整型數(shù):”);

      while(!(str=buf.readLine()).equalsIgnoreCase(“q”))

      { System.out.print(“請輸入另一個小于255整型數(shù),按Q結(jié)束:”);

      num1=Integer.parseInt(str);

      Fout.write(num1);

      }Fout.close();

      System.out.println(“你剛輸入的數(shù)據(jù)是:”);

      while((x=Fin.read())!=-1)

      { System.out.println(x);

      }Fin.close();

      System.out.print(“請輸入int范圍內(nèi)整型數(shù):”);

      while(!(str=buf.readLine()).equalsIgnoreCase(“q”))

      { System.out.print(“請輸入另一個整型數(shù),按Q結(jié)束:”);

      num1=Integer.parseInt(str);

      Dout.writeInt(num1);

      }Dout.close();

      int leng=Din.available()/4;

      int xxx=0;

      while(xxx

      { xxx++;

      x=Din.readInt();

      System.out.println(x);

      } Din.close();

      System.out.print(“請輸入第一個字符串:”);

      while((str=buf.readLine())!=null)

      { System.out.print(“請輸入另一個字符串,按Ctrl+Z結(jié)束:”);

      PWout.println(str);//寫入myfile3.txt中

      } PWout.close();

      RAread.seek(0);

      while(RAread.getFilePointer()

      {System.out.println(RAread.readLine());//從myfile3.txt中一行一行讀并輸出在控制臺上

      } RAread.close();

      System.out.println(“完成”);

      }

      }

      【思考問題】

      ① 本程序共用到哪幾種流式文件?都用于做什么?

      答:基本輸入輸出流:System.in.輸入(從鍵盤)

      System.out.輸出(顯示器)

      字節(jié)流類:FileOutputStream 文件輸出

      FileInputStream 文件輸入

      DataOutputStream數(shù)據(jù)輸出

      DataInputStream數(shù)據(jù)輸入

      字符流類:PrintWriter輸入

      緩沖文件流:BufferedReader

      ② 運行完程序后,請用“我的電腦”找到創(chuàng)建的文件,并分別打開文件看其內(nèi)容,你

      看到的是你輸入的數(shù)據(jù)嗎?

      答:myfile1和myfile2中的數(shù)據(jù)非輸入數(shù)據(jù),myfile3中可以看見輸入的數(shù)據(jù)。③ 將創(chuàng)建輸入流對象Fin放在輸出流Fout前,看發(fā)生什么?

      ④ 對第二種流式文件判斷文件占用字節(jié)的長度用available()方法,而此處用int

      leng=Din.available()/4;為什么除以4?

      2.按照第1題的內(nèi)容,修改程序要求每次重新運行不覆蓋原內(nèi)容,把所有其它流式文件全部改用隨機流式文件來實現(xiàn),新的數(shù)據(jù)填加在文件尾,然后讀出校驗。

      import java.io.*;

      public class sy6_2 {

      public static void main(String[] args)throws Exception {

      File Mypath;

      Mypath = new File(“E:aaa”);

      if(!Mypath.exists())

      {System.out.println(“創(chuàng)建新目錄”);Mypath.mkdir();}

      else System.out.println(“目錄已存在”);

      File Myfile1 = new File(Mypath, “myfile1.txt”);

      File Myfile2 = new File(Mypath, “myfile2.txt”);

      File Myfile3 = new File(Mypath, “myfile3.txt”);

      RandomAccessFile rf1 = new RandomAccessFile(Myfile1, “rw”);

      RandomAccessFile rf2 = new RandomAccessFile(Myfile2, “rw”);

      RandomAccessFile rf3 = new RandomAccessFile(Myfile3, “rw”);

      String str;

      int num1;

      BufferedReader buf;//緩沖流

      buf = new BufferedReader(new InputStreamReader(System.in));

      System.out.print(“請輸入一個小于255整型數(shù):”);

      rf1.seek(rf1.length());//指針移到文件尾進行寫操作

      while(!(str=buf.readLine()).equalsIgnoreCase(“q”))

      { System.out.print(“請輸入另一個小于255整型數(shù),按Q結(jié)束:”);num1=Integer.parseInt(str);

      rf1.write(num1);//將整型數(shù)作為ascii碼值所對應(yīng)的字符寫入myfile1.txt中}

      rf1.seek(0);//指針移到文件頭進行讀操作

      int x=0;

      while((x=rf1.read())!=-1)

      {

      System.out.println(x);

      } rf1.close();

      System.out.print(“請輸入int范圍內(nèi)整型數(shù):”);

      rf2.seek(rf2.length());

      while(!(str = buf.readLine()).equalsIgnoreCase(“q”)){

      System.out.print(“請輸入另一個整型數(shù),按Q結(jié)束:”);

      num1 = Integer.parseInt(str);

      rf2.writeInt(num1);

      }

      int x1 = 0;

      for(int l = 0;l

      {

      rf2.seek(l*4);

      x1 = rf2.readInt();

      System.out.println(x1);

      }

      rf2.close();

      System.out.print(“請輸入第一個字符串:”);

      rf3.seek(rf3.length());

      while((str = buf.readLine())!= null){

      System.out.println(“請輸入另一個字符串,按Ctrl+Z結(jié)束:”);rf3.writeUTF(str);//寫入myfile3.txt中

      }

      rf3.seek(0);

      while(rf3.getFilePointer()< rf3.length()){

      System.out.println(rf3.readUTF());//從myfile3.txt中讀出字符串并輸出在控制臺上

      }

      rf3.close();

      System.out.println(“完成”);

      }

      }

      三、實驗報告要求

      1.回答第1題【思考問題】提出的問題。

      2.寫出第二題要求的源程序。

      第三篇:實驗12:Java高級IO流程序設(shè)計

      實驗12:Java高級I/O流程序設(shè)計

      實驗時間:實驗地點:

      一、實驗?zāi)康募耙?/p>

      (1)掌握文件類File的使用。

      (2)理解隨機存取文件類RandomAccessFile的使用。

      二、實驗設(shè)備環(huán)境及要求

      三、實驗任務(wù)

      (1)按要求編寫Java Application程序,并編譯、運行這個程序。

      四、實驗內(nèi)容與步驟

      1.輸出當前目錄下my.txt文件的基本信息。

      import java.io.*;

      import java.util.*;

      public class FileTest{

      public static void main(String args[]){File f=new File(“my.txt”);System.out.println(“Absolute path: ” + f.getAbsolutePath()+“n Can read: ” + f.canRead()+“n Can write: ” + f.canWrite()+“n getName: ” + f.getName()+“n getParent: ” + f.getParent()+“n getPath: ” + f.getPath()+“n length: ” + f.length()+“n lastModified: ” + new Date(f.lastModified()));if(f.isFile())System.out.println(“It's a file”);

      }}else if(f.isDirectory())System.out.println(“It's a directory”);

      2.編寫一個Java Application程序,實現(xiàn)如下的設(shè)計功能:運行該程序可以列出當前目錄下的文件。

      import java.io.*;

      class FileDir{

      public static void main(String args[]){

      File f=new File(“D:”);

      File fs[]=f.listFiles();

      for(int i=0;i

      if(fs[i].isFile())

      System.out.println(fs[i].getName());

      else

      System.out.println(“

      ”+fs[i].getName());

      }

      }

      }

      五、實驗指導與處理

      六、分析討論

      實驗教師評語成績

      簽名:

      日期:

      第四篇:JAVA,IO流學習總結(jié)

      篇一:java之io流學習總結(jié) java之io流學習總結(jié)

      一、什么是流?

      流就是字節(jié)序列的抽象概念,能被連續(xù)讀取數(shù)據(jù)的數(shù)據(jù)源和能被連續(xù)寫入數(shù)據(jù)的接收端就是流,流機制是java及c++中的一個重要機制,通過流我們可以自由地控制文件、內(nèi)存、io設(shè)備等數(shù)據(jù)的流向。而io流就是用于處理設(shè)備上的數(shù)據(jù),如:硬盤、內(nèi)存、鍵盤錄入等。io流根據(jù)處理類型的不同可分為字節(jié)流和字符流,根據(jù)流向的不同可分為輸入流和輸出流。

      二、字節(jié)流和字符流的區(qū)別:字符流,因為文件編碼的不同,就有了對字符進行高效操作的字符流對象,它的原理就是基于字節(jié)流讀取字節(jié)時去查了指定的碼表。它和字節(jié)流的區(qū)別有兩點:1.在讀取數(shù)據(jù)的時候,字節(jié)流讀到一個字節(jié)就返回一個字節(jié),字符流使用了字節(jié)流讀到一個或多個字節(jié)(一個中文對應(yīng)的字節(jié)數(shù)是兩個,在utf-8碼表中是3個字節(jié))時,先去查指定的編碼表,再將查到的字符返回;2.字節(jié)流可以處理所有類型的數(shù)據(jù),如jpg、avi、mp3、wav等等,而字符流只能處理字符數(shù)據(jù)。所以可以根據(jù)處理的文件不同考慮使用字節(jié)流還是字符流,如果是純文本數(shù)據(jù)可以優(yōu)先考慮字符流,否則使用字節(jié)流。

      三、io體系,所具備的基本功能就是讀和寫: 1.字符流

      |--reader(讀)|--writer(寫)reader |--inputstreamreader |--filereader:用于處理文件的字符讀取流對象 writer |--outputstreamwriter |--filewriter:用于處理文件的字符寫入流對象

      其實很容易就可以看出來,io體系中的子類名后綴絕大部分是父類名稱,而前綴則是體現(xiàn)子類特有功能的名稱。reader中常見的方法: |--int read()讀取一個字符,并返回讀到的這個字符,讀到流的末尾則返回-1。|--int read(char[])將讀到的字符存入指定的數(shù)組中,返回的是讀到的字符個數(shù),讀到流的末尾則返回-1。|--close()讀取字符其實用的是window系統(tǒng)的功能,就希望使用完畢后,進行資源的釋放。filereader除了自己的構(gòu)造函數(shù)外沒有特有的方法: |--用于讀取文本文件的流對象。

      |--用于關(guān)聯(lián)文本文件。在讀取流對象初始化時,必須要指定一個被讀取的文件,如果該文件不存在則會發(fā)生filenotfoundexception異常。writer中常見的方法: |--write()將一個字符寫入到流中。|--write(char[])將一個字符數(shù)組寫入到流中。|--writer(string)將一個字符寫入到流中。|--flush()刷新流,將流中的數(shù)據(jù)刷新到目的地中,流還存在。|--close()關(guān)閉資源,在關(guān)閉錢會先調(diào)用flush(),刷新流中的數(shù)據(jù)到目的地。filewriter,除了自己的構(gòu)造函數(shù)外沒有特有的方法: |--該類的特點

      |--用于處理文本文件 |--沒有默認的編碼表 |--有臨時緩沖

      |--構(gòu)造函數(shù),在寫入流對象初始化時,必須要有一個存儲數(shù)據(jù)的目的地。|--filewriter(string filename),該構(gòu)造器是干什么用的呢? |--調(diào)用系統(tǒng)資源

      |--在指定位置創(chuàng)建一個文件,如果該文件已經(jīng)存在則被覆蓋。

      |--filewriter(string filename,boolean append),這構(gòu)造器的作用是當傳入的boolean類型的值為true時,會在指定文件末尾處進行數(shù)據(jù)的續(xù)寫。

      清單1,將文本數(shù)據(jù)保存到文件中代碼 private static void test1(){filewriter fw=null;//初始化filewriter對象,指定文件名已經(jīng)存儲路徑 fw=new filewriter(d:/test.txt);fw.write(將字符串寫入流);//將流中的數(shù)據(jù)刷新到目的地,流還在 fw.flush();fw.write(將字符串寫入流);} catch(ioexception e){ e.printstacktrace();}finally{ if(fw!=null){ try {fw.close();} catch(ioexception e1){e1.printstacktrace();}}} } 清單2,讀取一個已有文本文件,并將文本內(nèi)容打印出來代碼 private static void test2(){filereader fr=null;try { //初始化filereader對象,指定文件路徑 fr=new filereader(d:/test.txt);int ch=0;while((ch=fr.read())!=-1){ //每次讀取一個字符,直到讀到末尾-1為止 system.out.println((char)ch);} catch(ioexception e){ e.printstacktrace();}finally{ if(fr!=null){ try {fr.close();} catch(ioexception e1){e1.printstacktrace();}}} } 這樣每讀到一個字符就打印出來,效率很不高,能不能按指定大小讀取完后再打印出來呢?答案是當然可以的。

      清單3,讀取一個已有文本文件,讀完1kb再將其讀到的內(nèi)容打印出來代碼 private static void test3(){filereader fr=null;try { //初始化filereader對象,指定文件路徑 fr=new filereader(d:/test.txt);char[] buf=new char[1024];int len=0;while((len=fr.read(buf))!=-1){ //每次讀取1kb大小的字符,直到讀到末尾-1為止

      system.out.println(new string(buf,0,len));}} catch(ioexception e){篇二:java io流學習總結(jié) java流操作有關(guān)的類或接口:

      java流類圖結(jié)構(gòu):流的概念和作用

      流是一組有順序的,有起點和終點的字節(jié)集合,是對數(shù)據(jù)傳輸?shù)目偡Q或抽象。即數(shù)據(jù)在兩設(shè)備間的傳輸稱為流,流的本質(zhì)是數(shù)據(jù)傳輸,根據(jù)數(shù)據(jù)傳輸特性將流抽象為各種類,方便更直觀的進行數(shù)據(jù)操作。io流的分類

      ? 根據(jù)處理數(shù)據(jù)類型的不同分為:字符流和字節(jié)流 ? 根據(jù)數(shù)據(jù)流向不同分為:輸入流和輸出流

      字符流和字節(jié)流

      字符流的由來: 因為數(shù)據(jù)編碼的不同,而有了對字符進行高效操作的流對象。本質(zhì)其實就是基于字節(jié)流讀取時,去查了指定的碼表。字節(jié)流和字符流的區(qū)別:

      ? 讀寫單位不同:字節(jié)流以字節(jié)(8bit)為單位,字符流以字符為單位,根據(jù)碼表映射 字符,一次可能讀多個字節(jié)。

      ? 處理對象不同:字節(jié)流能處理所有類型的數(shù)據(jù)(如圖片、avi等),而字符流只能處 理字符類型的數(shù)據(jù)。

      結(jié)論:只要是處理純文本數(shù)據(jù),就優(yōu)先考慮使用字符流。除此之外都使用字節(jié)流。輸入流和輸出流

      對輸入流只能進行讀操作,對輸出流只能進行寫操作,程序中需要根據(jù)待傳輸數(shù)據(jù)的不同特性而使用不同的流。java io流對象

      1.輸入字節(jié)流inputstreamio 中輸入字節(jié)流的繼承圖可見上圖,可以看出: 1.inputstream 是所有的輸入字節(jié)流的父類,它是一個抽象類。

      2.bytearrayinputstream、stringbufferinputstream、fileinputstream 是三種基本的介質(zhì)

      流,它們分別從byte 數(shù)組、stringbuffer、和本地文件中讀取數(shù)據(jù)。pipedinputstream 是從與其它線程共用的管道中讀取數(shù)據(jù),與piped 相關(guān)的知識后續(xù)單獨介紹。3.objectinputstream 和所有filterinputstream 的子類都是裝飾流(裝飾器模式的主角)。2.輸出字節(jié)流outputstream io 中輸出字節(jié)流的繼承圖可見上圖,可以看出:

      1.outputstream 是所有的輸出字節(jié)流的父類,它是一個抽象類。2.bytearrayoutputstream、fileoutputstream 是兩種基本的介質(zhì)流,它們分別向byte 數(shù) 組、和本地文件中寫入數(shù)據(jù)。pipedoutputstream 是向與其它線程共用的管道中寫入數(shù)據(jù),3.objectoutputstream 和所有filteroutputstream 的子類都是裝飾流。3.字節(jié)流的輸入與輸出的對應(yīng)

      圖中藍色的為主要的對應(yīng)部分,紅色的部分就是不對應(yīng)部分。紫色的虛線部分代表這些流一般要搭配使用。從上面的圖中可以看出java io 中的字節(jié)流是極其對稱的?!按嬖诩昂侠怼蔽覀兛纯催@些字節(jié)流中不太對稱的幾個類吧!

      1.linenumberinputstream 主要完成從流中讀取數(shù)據(jù)時,會得到相應(yīng)的行號,至于什么 時候分行、在哪里分行是由改類主動確定的,并不是在原始中有這樣一個行號。在輸出部分沒有對應(yīng)的部分,我們完全可以自己建立一個linenumberoutputstream,在最初寫入時會有一個基準的行號,以后每次遇到換行時會在下一行添加一個行號,看起來也是可以的。好像更不入流了。

      2.pushbackinputstream 的功能是查看最后一個字節(jié),不滿意就放入緩沖區(qū)。主要用在 編譯器的語法、詞法分析部分。輸出部分的bufferedoutputstream 幾乎實現(xiàn)相近的功能。3.stringbufferinputstream 已經(jīng)被deprecated,本身就不應(yīng)該出現(xiàn)在inputstream 部分,主要因為string 應(yīng)該屬于字符流的范圍。已經(jīng)被廢棄了,當然輸出部分也沒有必要需要它了!還允許它存在只是為了保持版本的向下兼容而已。

      4.sequenceinputstream 可以認為是一個工具類,將兩個或者多個輸入流當成一個輸入 流依次讀取。完全可以從io 包中去除,還完全不影響io 包的結(jié)構(gòu),卻讓其更“純潔”――純潔的decorator 模式。

      5.printstream 也可以認為是一個輔助工具。主要可以向其他輸出流,或者

      fileinputstream 寫入數(shù)據(jù),本身內(nèi)部實現(xiàn)還是帶緩沖的。本質(zhì)上是對其它流的綜合運用的一個工具而已。一樣可以踢出io 包!system.out 和system.out 就是printstream 的實例!4.字符輸入流reader在上面的繼承關(guān)系圖中可以看出: 1.reader 是所有的輸入字符流的父類,它是一個抽象類。

      2.charreader、stringreader 是兩種基本的介質(zhì)流,它們分別將char 數(shù)組、string中 讀取數(shù)據(jù)。pipedreader 是從與其它線程共用的管道中讀取數(shù)據(jù)。

      3.bufferedreader 很明顯就是一個裝飾器,它和其子類負責裝飾其它reader 對象。4.filterreader 是所有自定義具體裝飾流的父類,其子類pushbackreader 對reader 對 象進行裝飾,會增加一個行號。

      5.inputstreamreader 是一個連接字節(jié)流和字符流的橋梁,它將字節(jié)流轉(zhuǎn)變?yōu)樽址?。filereader 可以說是一個達到此功能、常用的工具類,在其源代碼中明顯使用了將fileinputstream 轉(zhuǎn)變?yōu)閞eader 的方法。我們可以從這個類中得到一定的技巧。reader 中各個類的用途和使用方法基本和inputstream 中的類使用一致。后面會有reader 與inputstream 的對應(yīng)關(guān)系。5.字符輸出流writer 在上面的關(guān)系圖中可以看出:

      1.writer 是所有的輸出字符流的父類,它是一個抽象類。2.chararraywriter、stringwriter 是兩種基本的介質(zhì)流,它們分別向char 數(shù)組、string 中寫入數(shù)據(jù)。pipedwriter 是向與其它線程共用的管道中寫入數(shù)據(jù),3.bufferedwriter 是一個裝飾器為writer 提供緩沖功能。

      4.printwriter 和printstream 極其類似,功能和使用也非常相似。5.outputstreamwriter 是outputstream 到writer 轉(zhuǎn)換的橋梁,它的子類filewriter 其 實就是一個實現(xiàn)此功能的具體類(具體可以研究一sourcecode)。功能和使用和outputstream 極其類似,后面會有它們的對應(yīng)圖。6.字符流的輸入與輸出的對應(yīng) 7.字符流與字節(jié)流轉(zhuǎn)換 轉(zhuǎn)換流的特點:

      1.其是字符流和字節(jié)流之間的橋梁

      2.可對讀取到的字節(jié)數(shù)據(jù)經(jīng)過指定編碼轉(zhuǎn)換成字符 3.可對讀取到的字符數(shù)據(jù)經(jīng)過指定編碼轉(zhuǎn)換成字節(jié) 何時使用轉(zhuǎn)換流?

      1.當字節(jié)和字符之間有轉(zhuǎn)換動作時; 2.流操作的數(shù)據(jù)需要編碼或解碼時。具體的對象體現(xiàn):

      1.inputstreamreader:字節(jié)到字符的橋梁 2.outputstreamwriter:字符到字節(jié)的橋梁

      這兩個流對象是字符體系中的成員,它們有轉(zhuǎn)換作用,本身又是字符流,所以在構(gòu)造的時候需要傳入字節(jié)流對象進來。8.file類

      file類是對文件系統(tǒng)中文件以及文件夾進行封裝的對象,可以通過對象的思想來操作文件和文件夾。file類保存文件或目錄的各種元數(shù)據(jù)信息,包括文件名、文件長度、最后修改時間、是否可讀、獲取當前文件的路徑名,判斷指定文件是否存在、獲得當前目錄中的文件列表,創(chuàng)建、刪除文件和目錄等方法。篇三:java io流學習總結(jié) java流操作有關(guān)的類或接口:

      java流類圖結(jié)構(gòu):流的概念和作用

      流是一組有順序的,有起點和終點的字節(jié)集合,是對數(shù)據(jù)傳輸?shù)目偡Q或抽象。即數(shù)據(jù)在兩設(shè)備間的傳輸稱為流,流的本質(zhì)是數(shù)據(jù)傳輸,根據(jù)數(shù)據(jù)傳輸特性將流抽象為各種類,方便更直觀的進行數(shù)據(jù)操作。io流的分類

      根據(jù)處理數(shù)據(jù)類型的不同分為:字符流和字節(jié)流 ? 根據(jù)數(shù)據(jù)流向不同分為:輸入流和輸出流 ? 字符流和字節(jié)流

      字符流的由來: 因為數(shù)據(jù)編碼的不同,而有了對字符進行高效操作的流對象。本質(zhì)其實就是基于字節(jié)流讀取時,去查了指定的碼表。字節(jié)流和字符流的區(qū)別:

      讀寫單位不同:字節(jié)流以字節(jié)(8bit)為單位,字符流以字符為單位,根據(jù)碼表映射字符,一次可能讀多個字節(jié)。

      ? 處理對象不同:字節(jié)流能處理所有類型的數(shù)據(jù)(如圖片、avi等),而字符流只能處理字符類型的數(shù)據(jù)。? 結(jié)論:只要是處理純文本數(shù)據(jù),就優(yōu)先考慮使用字符流。除此之外都使用字節(jié)流。

      輸入流和輸出流

      對輸入流只能進行讀操作,對輸出流只能進行寫操作,程序中需要根據(jù)待傳輸數(shù)據(jù)的不同特性而使用不同的流。java io流對象

      1.輸入字節(jié)流inputstreamio 中輸入字節(jié)流的繼承圖可見上圖,可以看出: 1.inputstream 是所有的輸入字節(jié)流的父類,它是一個抽象類。

      2.bytearrayinputstream、stringbufferinputstream、fileinputstream 是三種基本的介質(zhì)流,它們分別從byte 數(shù)組、stringbuffer、和本地文件中讀取數(shù)據(jù)。pipedinputstream 是從與其它線程共用的管道中讀取數(shù)據(jù),與piped 相關(guān)的知識后續(xù)單獨介紹。3.objectinputstream 和所有filterinputstream 的子類都是裝飾流(裝飾器模式的主角)。2.輸出字節(jié)流outputstream io 中輸出字節(jié)流的繼承圖可見上圖,可以看出:

      1.outputstream 是所有的輸出字節(jié)流的父類,它是一個抽象類。2.bytearrayoutputstream、fileoutputstream 是兩種基本的介質(zhì)流,它們分別向byte 數(shù)組、和本地文件中寫入數(shù)據(jù)。pipedoutputstream 是向與其它線程共用的管道中寫入數(shù)據(jù),3.objectoutputstream 和所有filteroutputstream 的子類都是裝飾流。3.字節(jié)流的輸入與輸出的對應(yīng)

      圖中藍色的為主要的對應(yīng)部分,紅色的部分就是不對應(yīng)部分。紫色的虛線部分代表這些流一般要搭配使用。從上面的圖中可以看出java io 中的字節(jié)流是極其對稱的。“存在及合理”我們看看這些字節(jié)流中不太對稱的幾個類吧!1.linenumberinputstream 主要完成從流中讀取數(shù)據(jù)時,會得到相應(yīng)的行號,至于什么時候分行、在哪里分行是由改類主動確定的,并不是在原始中有這樣一個行號。在輸出部分沒有對應(yīng)的部 分,我們完全可以自己建立一個linenumberoutputstream,在最初寫入時會有一個基準的行號,以后每次遇到換行時會在下一行添加一個行 號,看起來也是可以的。好像更不入流了。2.pushbackinputstream 的功能是查看最后一個字節(jié),不滿意就放入緩沖區(qū)。主要用在編譯器的語法、詞法分析部分。輸出部分的

      bufferedoutputstream 幾乎實現(xiàn)相近的功能。3.stringbufferinputstream 已經(jīng)被deprecated,本身就不應(yīng)該出現(xiàn)在inputstream 部分,主要因為string 應(yīng)該屬于字符流的范圍。已經(jīng)被廢棄了,當然輸出部分也沒有必要需要它了!還允許它存在只是為了保持版本的向下兼容而已。4.sequenceinputstream 可以認為是一個工具類,將兩個或者多個輸入流當成一個輸入流依次讀取。完全可以從io 包中去除,還完全不影響io 包的結(jié)構(gòu),卻讓其更“純潔”――純潔的decorator 模式。5.printstream 也可以認為是一個輔助工具。主要可以向其他輸出流,或者fileinputstream 寫入數(shù)據(jù),本身內(nèi)部實現(xiàn)還是帶緩沖的。本質(zhì)上是對其它流的綜合運用的一個工具而已。一樣可以踢出io 包!system.out 和system.out 就是printstream 的實例!4.字符輸入流reader 在上面的繼承關(guān)系圖中可以看出:

      1.reader 是所有的輸入字符流的父類,它是一個抽象類。

      2.charreader、stringreader 是兩種基本的介質(zhì)流,它們分別將char 數(shù)組、string中讀取數(shù)據(jù)。pipedreader 是從與其它線程共用的管道中讀取數(shù)據(jù)。

      3.bufferedreader 很明顯就是一個裝飾器,它和其子類負責裝飾其它reader 對象。4.filterreader 是所有自定義具體裝飾流的父類,其子類pushbackreader 對reader 對象進行裝飾,會增加一個行號。

      5.inputstreamreader 是一個連接字節(jié)流和字符流的橋梁,它將字節(jié)流轉(zhuǎn)變?yōu)樽址?。filereader 可以說是一個達到此功能、常用的工具類,在其源代碼中明顯使用了將fileinputstream 轉(zhuǎn)變?yōu)閞eader 的方法。我們可以從這個類中得到一定的技巧。reader 中各個類的用途和使用方法基本和inputstream 中的類使用一致。后面會有reader 與inputstream 的對應(yīng)關(guān)系。5.字符輸出流writer 在上面的關(guān)系圖中可以看出:

      1.writer 是所有的輸出字符流的父類,它是一個抽象類。2.chararraywriter、stringwriter 是兩種基本的介質(zhì)流,它們分別向char 數(shù)組、string 中寫入數(shù)據(jù)。pipedwriter 是向與其它線程共用的管道中寫入數(shù)據(jù),3.bufferedwriter 是一個裝飾器為writer 提供緩沖功能。

      4.printwriter 和printstream 極其類似,功能和使用也非常相似。5.outputstreamwriter 是outputstream 到writer 轉(zhuǎn)換的橋梁,它的子類filewriter 其實就是一個實現(xiàn)此功能的具體類(具體可以研究一 sourcecode)。功能和使用和outputstream 極其類似,后面會有它們的對應(yīng)圖。

      第五篇:Java之IO流學習總結(jié)

      Java之IO流學習總結(jié)

      一、什么是流?

      流就是字節(jié)序列的抽象概念,能被連續(xù)讀取數(shù)據(jù)的數(shù)據(jù)源和能被連續(xù)寫入數(shù)據(jù)的接收端就是流,流機制是Java及C++中的一個重要機制,通過流我們可以自由地控制文件、內(nèi)存、IO設(shè)備等數(shù)據(jù)的流向。而IO流就是用于處理設(shè)備上的數(shù)據(jù),如:硬盤、內(nèi)存、鍵盤錄入等。IO流根據(jù)處理類型的不同可分為字節(jié)流和字符流,根據(jù)流向的不同可分為輸入流和輸出流。

      字符流,因為文件編碼的不同,就有了對字符進行高效操作的字符流對象,它的原理就是基于字節(jié)流讀取字節(jié)時去查了指定的碼表。它和字節(jié)流的區(qū)別有兩點:1.在讀取數(shù)據(jù)的時候,字節(jié)流讀到一個字節(jié)就返回一個字節(jié),字符流使用了字節(jié)流讀到一個或多個字節(jié)(一個中文對應(yīng)的字節(jié)數(shù)是兩個,在UTF-8碼表中是3個字節(jié))時,先去查指定的編碼表,再將查到的字符返回;2.字節(jié)流可以處理所有類型的數(shù)據(jù),如jpg、avi、mp3、wav等等,而字符流只能處理字符數(shù)據(jù)。所以可以根據(jù)處理的文件不同考慮使用字節(jié)流還是字符流,如果是純文本數(shù)據(jù)可以優(yōu)先考慮字符流,否則使用字節(jié)流。

      三、IO體系,所具備的基本功能就是讀和寫: 1.字符流

      |--Reader(讀)|--Writer(寫)Reader

      |--InputStreamReader

      |--FileReader:用于處理文件的字符讀取流對象 Writer

      |--OutputStreamWriter

      |--FileWriter:用于處理文件的字符寫入流對象

      其實很容易就可以看出來,IO體系中的子類名后綴絕大部分是父類名稱,而前綴則是體現(xiàn)子類特有功能的名稱。Reader中常見的方法: |--int read()

      讀取一個字符,并返回讀到的這個字符,讀到流的末尾則返回-1。|--int read(char[])

      將讀到的字符存入指定的數(shù)組中,返回的是讀到的字符個數(shù),讀到流的末尾則返回-1。|--close()

      讀取字符其實用的是window系統(tǒng)的功能,就希望使用完畢后,進行資源的釋放。FileReader除了自己的構(gòu)造函數(shù)外沒有特有的方法: |--用于讀取文本文件的流對象。|--用于關(guān)聯(lián)文本文件。

      |--構(gòu)造函數(shù)FileReader(String fileName)在讀取流對象初始化時,必須要指定一個被讀取的文件,如果該文件不存在則會發(fā)生FileNotFoundException異常。Writer中常見的方法: |--write()

      將一個字符寫入到流中。|--write(char[])

      將一個字符數(shù)組寫入到流中。|--writer(String)將一個字符寫入到流中。|--flush()

      刷新流,將流中的數(shù)據(jù)刷新到目的地中,流還存在。|--close()

      關(guān)閉資源,在關(guān)閉錢會先調(diào)用flush(),刷新流中的數(shù)據(jù)到目的地。

      FileWriter,除了自己的構(gòu)造函數(shù)外沒有特有的方法:

      |--該類的特點 |--用于處理文本文件 |--沒有默認的編碼表 |--有臨時緩沖

      |--構(gòu)造函數(shù),在寫入流對象初始化時,必須要有一個存儲數(shù)據(jù)的目的地。|--FileWriter(String fileName),該構(gòu)造器是干什么用的呢? |--調(diào)用系統(tǒng)資源

      |--在指定位置創(chuàng)建一個文件,如果該文件已經(jīng)存在則被覆蓋。

      |--FileWriter(String filename,Boolean append),這構(gòu)造器的作用是當傳入的boolean類型的值為true時,會在指定文件末尾處進行數(shù)據(jù)的續(xù)寫。

      清單1,將文本數(shù)據(jù)保存到文件中代碼 private static void test1(){ FileWriter fw=null;try { //初始化FileWriter對象,指定文件名已經(jīng)存儲路徑 fw=new FileWriter(“D:/test.txt”);fw.write(“將字符串寫入流”);//將流中的數(shù)據(jù)刷新到目的地,流還在 fw.flush();fw.write(“將字符串寫入流”);} catch(IOException e){ e.printStackTrace();}finally{ if(fw!=null){ try { fw.close();} catch(IOException e1){ e1.printStackTrace();} } } }

      清單2,讀取一個已有文本文件,并將文本內(nèi)容打印出來代碼 private static void test2(){ FileReader fr=null;try { //初始化FileReader對象,指定文件路徑 fr=new FileReader(“D:/test.txt”);int ch=0;while((ch=fr.read())!=-1){ //每次讀取一個字符,直到讀到末尾-1為止 System.out.println((char)ch);} } catch(IOException e){ e.printStackTrace();}finally{ if(fr!=null){ try { fr.close();} catch(IOException e1){ e1.printStackTrace();} } } }

      這樣每讀到一個字符就打印出來,效率很不高,能不能按指定大小讀取完后再打印出來呢?答案是當然可以的。

      清單3,讀取一個已有文本文件,讀完1kb再將其讀到的內(nèi)容打印出來代碼 private static void test3(){ FileReader fr=null;try { //初始化FileReader對象,指定文件路徑 fr=new FileReader(“D:/test.txt”);char[] buf=new char[1024];int len=0;while((len=fr.read(buf))!=-1){ //每次讀取1kb大小的字符,直到讀到末尾-1為止 System.out.println(new String(buf,0,len));} } catch(IOException e){ e.printStackTrace();}finally{ if(fr!=null){ try { fr.close();} catch(IOException e1){ e1.printStackTrace();} } } }

      字符流的緩沖區(qū):

      |--緩沖區(qū)的出現(xiàn)提高了對流的操作效率。原理:其實就是將數(shù)組進行封裝。|--對應(yīng)的對象 |--BufferedWriter

      特有方法newLine(),跨平臺的換行符。|--BufferedReader

      特有方法readLine(),一次讀一行,到行標記時,將行標記之前的字符數(shù)據(jù)作為字符串返回,讀到末尾返回null。

      |--說明在使用緩沖區(qū)對象時,要明確,緩沖的存在是為了增強流的功能而存在,所以在建立緩沖區(qū)對象時,要先有流對象存在。其實緩沖區(qū)內(nèi)部就是在使用流對象的方法,只不過加入了數(shù)組對數(shù)據(jù)進行了臨時存儲,為了提高操作數(shù)據(jù)的效率。

      |--代碼上的體現(xiàn) |--寫入緩沖區(qū)對象

      根據(jù)前面所說的建立緩沖區(qū)時要先有流對象,并將其作為參數(shù)傳遞給緩沖區(qū)的構(gòu)造函數(shù) BufferedWriter bufw=new BufferedWriter(new FileWriter(“test.txt”));bufw.write(“將數(shù)據(jù)寫入緩沖區(qū)”);

      bufw.flush();//將緩沖區(qū)的數(shù)據(jù)刷新到目的地 bufw.close();//其實關(guān)閉的是被包裝在內(nèi)部的流對象 |--讀取緩沖區(qū)對象

      BufferedReader bufr=new BufferedReader(new FileReader(“test.txt”));String line=null;

      while((line=bufr.readLine())!=null){ //每次讀取一行,取出的數(shù)據(jù)不包含回車符 system.out.println(line);}

      bufr.close();

      清單4,使用緩沖區(qū)對文本文件進行拷貝代碼 private static void test4(){ BufferedReader bufr=null;BufferedWriter bufw=null;try {

      bufr=new BufferedReader(new FileReader(“D:/a.txt”));bufw=new BufferedWriter(new FileWriter(“D:/b.txt”));String line=null;while((line=bufr.readLine())!=null){ bufw.write(line);//每次將一行寫入緩沖區(qū) bufw.flush();//刷新到目的地 } } catch(IOException e){ e.printStackTrace();}finally{ try { if(bufw!=null){ bufw.close();} if(bufr!=null){ bufr.close();} } catch(IOException e1){ e1.printStackTrace();} } }

      仔細看可以發(fā)現(xiàn),程序里面的FileReader對象和FileWriter對象直接new出來且沒有調(diào)用close(),因為緩沖對象調(diào)用了這兩個方法,前面說了,緩沖對象調(diào)用的flush()和close()其實就是關(guān)閉被包裝在其內(nèi)部的流對象。關(guān)閉流的先后順序也要注意,如果流之間有依賴關(guān)系,則被依賴的流要后關(guān)閉。readLine()方法原理:其實緩沖區(qū)中的該方法,用的還是與緩沖區(qū)關(guān)聯(lián)的流對象的read方法,只不過,每一次讀到一個字符先不進行具體操作,先進行臨時存儲,當讀到回車標記時,將臨時容器中存儲的數(shù)據(jù)一次性返回。我們可以根據(jù)這個原理來自己編寫一個緩沖區(qū)對象。

      清單5,編寫一個自己的bufferedreader代碼

      public class MyBufferedReader { private Reader reader;public MyBufferedReader(Reader reader){ this.reader=reader;}

      public String readLine()throws IOException{ StringBuilder sb=new StringBuilder();int ch=0;while((ch=reader.read())!=-1){ if(ch=='r'){//空格則繼續(xù) continue;}else if(ch=='n'){//每次返回一行 return sb.toString();}else{ sb.append((char)ch);} } return sb.toString();}

      public void close()throws IOException{ //緩沖對象的關(guān)閉方法其實就是調(diào)用流本身的close()reader.close();} }

      測試時把清單4的BufferedReader對象替換成MyBufferedReader對象即可。

      清單6,測試mybufferedreader代碼 private static void test4(){ MyBufferedReader bufr=null;BufferedWriter bufw=null;try {

      bufr=new MyBufferedReader(new FileReader(“D:/a.txt”));bufw=new BufferedWriter(new FileWriter(“D:/b.txt”));String line=null;while((line=bufr.readLine())!=null){ bufw.write(line);//每次將一行寫入緩沖區(qū) bufw.flush();//刷新到目的地 } } catch(IOException e){ e.printStackTrace();}finally{ try { if(bufw!=null){ bufw.close();} if(bufr!=null){ bufr.close();} } catch(IOException e1){ e1.printStackTrace();} } }

      其實我們自己寫的這個緩存對象就是對Reader對象進行了功能的增強,Reader對象每次只能返回一個字符,而增強了功能之后該類就可以每次返回一行字符,也就是設(shè)計模式中所說的裝飾模式。

      2.字節(jié)流

      |--InputStream(讀)|--OutputStream(寫)

      由于字節(jié)是二進制數(shù)據(jù),所以字節(jié)流可以操作任何類型的數(shù)據(jù),值得注意的是字符流使用的是字符數(shù)組char[]而字節(jié)流使用的是字節(jié)數(shù)組byte[]。下面來看一個字節(jié)流讀寫文件的簡單例子。

      清單7,使用字節(jié)流讀寫文本文件代碼 private static void test5(){ FileOutputStream fos=null;try{ fos=new FileOutputStream(“D:/test.txt”);fos.write(0010);//寫入二進制數(shù)據(jù) fos.flush();}catch(IOException e){ }finally{ try{ fos.close();}catch(IOException ex){ } } FileInputStream fis=null;try{ fis=new FileInputStream(“D:/test.txt”);//fis.available()是獲取關(guān)聯(lián)文件的字節(jié)數(shù),即test.txt的字節(jié)數(shù) //這樣創(chuàng)建的數(shù)組大小就和文件大小剛好相等

      //這樣做的缺點就是文件過大時,可能超出jvm的內(nèi)存空間,從而造成內(nèi)存溢出 byte[] buf=new byte[fis.available()];fis.read(buf);System.out.println(new String(buf));}catch(IOException e){ }finally{ try{ fos.close();}catch(IOException ex){ } } }

      清單8,使用緩沖區(qū)對一張圖片進行復制代碼 private static void test6(){ BufferedOutputStream bos=null;BufferedInputStream bis=null;try{ //前面已經(jīng)說過了,緩沖對象是根據(jù)具體的流對象創(chuàng)建的,所以必須要有流對象 bis=new BufferedInputStream(new FileInputStream(“E:imageswo1.jpg”));//寫入目標地址

      bos=new BufferedOutputStream(new FileOutputStream(“E: est.jpg”));byte[] buf=new byte[1024];while((bis.read(buf))!=-1){ bos.write(buf);} bos.flush();}catch(IOException e){ e.toString();}finally{ try{ if(bos!=null){ bos.close();} if(bis!=null){ bis.close();} }catch(IOException ex){ ex.toString();} } }

      3.轉(zhuǎn)換流

      特點

      |--是字節(jié)流和字符流之間的橋梁

      |--該流對象可以對讀取到的字節(jié)數(shù)據(jù)進行指定編碼表的編碼轉(zhuǎn)換

      何時使用

      |--當字節(jié)和字符之間有轉(zhuǎn)換動作時 |--流操作的數(shù)據(jù)需要進行編碼表的指定時

      具體對象體現(xiàn)

      |--InputStreamReader:字節(jié)到字符的橋梁 |--OutputStreamWriter:字符到字節(jié)的橋梁

      說明

      這兩個流對象是字符流體系中的成員,它們有轉(zhuǎn)換的作用,而本身又是字符流,所以在new的時候需要傳入字節(jié)流對象。

      構(gòu)造函數(shù)

      |--InputStreamReader(InputStream)

      通過該構(gòu)造函數(shù)初始化,使用的是系統(tǒng)默認的編碼表GBK。|--InputStreamReader(InputStream,String charset)

      通過該構(gòu)造函數(shù)初始化,可以通過charset參數(shù)指定編碼。|--OutputStreamWriter(OutputStream)

      使用的是系統(tǒng)默認的編碼表GBK。

      |--OutputStreamWriter(OutputSream,String charset)

      通過該構(gòu)造函數(shù)初始化,可以通過參數(shù)charset指定編碼。

      操作文件的字符流對象是轉(zhuǎn)換流的子類

      |--Reader

      |--InputStreamReader(轉(zhuǎn)換流)|--FileReader(文件字符流)

      |--Writer

      |--OutputStreamWriter(轉(zhuǎn)換流)|--FileWriter(文件字符流)

      說明

      轉(zhuǎn)換流中的read方法,已經(jīng)融入了編碼表,在底層調(diào)用字節(jié)流的read方法時將獲取的一個或者多個字節(jié)數(shù)據(jù)進行臨時存儲,并去查指定的編碼表,如果編碼沒有指定,則使用默認編碼表。

      既然轉(zhuǎn)換流已經(jīng)完成了編碼轉(zhuǎn)換的動作,對于直接操作的文本文件的FileReader而言,就不用再重新定義了,只要繼承該轉(zhuǎn)換流,獲取其方法,就可以直接操作文本文件中的字符數(shù)據(jù)了。

      注意

      在使用FileReader操作文本數(shù)據(jù)時,該對象使用的是默認的編碼表,如果要使用指定的編碼表,必須使用轉(zhuǎn)換流。

      代碼體現(xiàn)

      FileReader fr=new FileReader(“test.txt”);InputStreamReader isr=new InputStreamReader(new FileInputStreamReader(“test.txt”));

      這兩句代碼意義相同,操作test.txt中的數(shù)據(jù)都是使用了系統(tǒng)默認的編碼GBK。因為我們系統(tǒng)默認使用的編碼表是GBK,如果test.txt中的數(shù)據(jù)是通過UTF-8形式編碼的,那么在讀取的時候就需要指定編碼表,因此轉(zhuǎn)換流必須使用InputStreamReader isr=newInputStreamReader(new FileInputStream(“a.txt”),”UTF-8”);

      四、流操作的基本規(guī)律

      |--明確數(shù)據(jù)源和數(shù)據(jù)匯(數(shù)據(jù)目的)

      其實是為了明確是輸入流還是輸出流

      |--明確操作的數(shù)據(jù)是否是純文本數(shù)據(jù)

      |--說明

      數(shù)據(jù)源

      鍵盤System.in、硬盤、File開頭的流對象、內(nèi)存(數(shù)組)。

      數(shù)據(jù)匯

      控制臺System.out、硬盤、File開頭的流對象、內(nèi)存(數(shù)組)。

      |--需求

      將鍵盤錄入的數(shù)據(jù)存儲到一個文件中和打印到控制臺

      |--數(shù)據(jù)源System.in

      既然是源,使用的就是輸入流,可用的體系有InputStream、Reader。因為鍵盤錄入進來的一定是純文本數(shù)據(jù),所以可以使用專門操作字符數(shù)據(jù)的Reader。而System.in對應(yīng)的流是字節(jié)讀取流,所以要將其進行轉(zhuǎn)換,將字節(jié)轉(zhuǎn)換成字符即可,所以要使用Reader體系中的InputStreamReader,如果要提高效率,就使用BufferedReader,代碼如:

      BufferedReader bur=new BufferedReader(newInputStreamReader(Sysem.in));

      |--數(shù)據(jù)匯:一個文件、硬盤

      數(shù)據(jù)匯一定是輸出流,可以用的體系有OutputStream、Writer。往文件中存儲的都是文本數(shù)據(jù),那么可以使用字符流較為方便Writer。因為操作的是一個文件,所以使用Writer中的FileWriter,同理,要提高效率就要使用BufferedWriter。

      代碼如:BufferedWriter bufr=new BufferedWriter(new

      FileWriter(“test.txt”));

      清單9,將鍵盤錄入的數(shù)據(jù)存儲到一個文件中和打印到控制臺代碼 private static void test7(){ BufferedReader bur=null;OutputStreamWriter osw=null;BufferedWriter bw=null;try{ //數(shù)據(jù)源

      bur=new BufferedReader(new InputStreamReader(System.in));//數(shù)據(jù)匯

      osw=new OutputStreamWriter(System.out);//數(shù)據(jù)匯,因為數(shù)據(jù)源用的是系統(tǒng)默認編碼,所以這里可以直接使用FileWriter //否則必須使用OutputStreamWriter轉(zhuǎn)換流

      bw=new BufferedWriter(new FileWriter(“D: est_target.txt”));String line=null;while((line=bur.readLine())!=null){ osw.write(line);osw.flush();//刷新到控制臺 bw.write(line);bw.flush();//刷新到文本文件 } }catch(IOException e){ e.toString();}finally{ try{ if(osw!=null){ osw.close();} if(bur!=null){ bur.close();} if(bw!=null){ bw.close();} }catch(IOException ex){ ex.toString();} } }

      清單9是按照默認編碼表寫入文本文件的,那么如何按照指定編碼表寫入文件呢?其實也很簡單,將清單9的代碼稍微改一下就可以了。

      清單10代碼

      private static void test8(){ BufferedReader bur=null;BufferedWriter bw=null;try{ //數(shù)據(jù)源

      bur=new BufferedReader(new InputStreamReader(System.in));//數(shù)據(jù)匯,按照指定編碼格式存儲到文本文件

      bw=new BufferedWriter(new OutputStreamWriter(new FileOutputStream(“D: est_target.txt”),“UTF-8”));String line=null;while((line=bur.readLine())!=null){ bw.write(line);bw.flush();//刷新到文本文件 } }catch(IOException e){ e.toString();}finally{ try{ if(bur!=null){ bur.close();} if(bw!=null){ bw.close();} }catch(IOException ex){ ex.toString();} } }

      既然寫入文件時指定了編碼,那么在讀取的時候就必須指定該編碼才能正確顯示。

      清單11,讀取指定編碼表的文件代碼 private static void test9(){ BufferedReader bur = null;try { // 注意,這里讀取的是清單8寫入的文件,// 清單10用UTF-8編碼格式寫入,// 所以在構(gòu)造InputStreamReader時必須指定UTF-8編碼 bur = new BufferedReader(new InputStreamReader(new FileInputStream(“D: est_target.txt”), “UTF-8”));String line = null;while((line = bur.readLine())!= null){ System.out.println(line);} } catch(IOException e){ e.toString();} finally { try { if(bur!= null){ bur.close();} } catch(IOException ex){ ex.toString();} } }

      寫入和讀取都做了,現(xiàn)在還差個復制操作,其實復制文件也很簡單,先讀取文件,再將讀取到的數(shù)據(jù)寫入文件,不同的是,在讀取和寫入時我們可以指定編碼表。

      清單12代碼

      private static void test11(){ BufferedReader bur = null;BufferedWriter buw = null;try { bur = new BufferedReader(new InputStreamReader(new FileInputStream(“D: est_target.txt”), “UTF-8”));buw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(“D: est_target1.txt”),“UTF-8”));String line = null;while((line = bur.readLine())!= null){ buw.write(line);buw.flush();// 刷新到文本文件 } } catch(IOException e){ e.toString();} finally { try { if(buw!= null){ buw.close();} if(bur!= null){ bur.close();} } catch(IOException ex){ ex.toString();} } }

      下載Java實驗五 IO流的一般使用word格式文檔
      下載Java實驗五 IO流的一般使用.doc
      將本文檔下載到自己電腦,方便修改和收藏,請勿使用迅雷等下載。
      點此處下載文檔

      文檔為doc格式


      聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻自行上傳,本網(wǎng)站不擁有所有權(quán),未作人工編輯處理,也不承擔相關(guān)法律責任。如果您發(fā)現(xiàn)有涉嫌版權(quán)的內(nèi)容,歡迎發(fā)送郵件至:645879355@qq.com 進行舉報,并提供相關(guān)證據(jù),工作人員會在5個工作日內(nèi)聯(lián)系你,一經(jīng)查實,本站將立刻刪除涉嫌侵權(quán)內(nèi)容。

      相關(guān)范文推薦

        JAVA(IO流方法大全)(優(yōu)秀范文五篇)

        package Stream; import java.io.*; public class Io { public void test1 throws Exception{ File file=new File("E:/txt.txt"); if(file.exists){System.out.println......

        Java IO流將信息寫入文本文件檔

        public class Test{ public static void main(String[] args) { try { BufferedWriter bw = new BufferedWriter(new FileWriter("data.txt")); //文件將會創(chuàng)建在程序所在的......

        java流實驗內(nèi)容及代碼

        實驗7 流(2學時) 一、實驗?zāi)康?1. 熟悉流類庫中各種常用流的使用方法。 2. 能夠使用流類實現(xiàn)基本的文件讀寫。 二、實驗內(nèi)容 1. 編寫程序,在控制臺窗口提示輸入兩個整數(shù),然后接......

        Java語言實驗指導書-實驗10 流范文

        一、實驗?zāi)康?熟悉文件流操作方法。 應(yīng)用文件流操作文件。 二、實驗內(nèi)容 利用流操作,在屏幕上顯示文本文件內(nèi)容及文件的路徑、修改時間、大小、長度、 可讀性和可修......

        08 Java當中的輸入輸出流的學習筆記 基本IO(5篇范例)

        流的分類: 輸入流(InputStream/Reader),輸出流(OutputStream/Writer) 字節(jié)流(InputStream,OutputStream) 字符流(Reader/Writer) 節(jié)點流(InputStream/Reader,OutputStream/Writ......

        使用java輸入輸出流實現(xiàn)文件的復制

        使用java輸入輸出流實現(xiàn)文件的復制: public class Test {public static void copy(File source,File target){ InputStream in=null; OutputStream out=null; try { in=new B......

        《Java面向?qū)ο蟪绦蛟O(shè)計》實驗-實驗八(輸入輸出流)(合集)

        廣西科技大學 計通學院 《Java面向?qū)ο蟪绦蛟O(shè)計》實驗 實驗八輸入輸出流 學生姓名:××× 學號:××× 班級:××× 指導老師:××× 專業(yè):計算機科學與技術(shù)提交日期:×××年××......

        黑馬程序員——IO(Input Output)流總結(jié)(一)

        IO(Input Output)流總結(jié)(一) IO流是處理數(shù)據(jù)之間數(shù)據(jù)傳輸?shù)摹?Java對數(shù)據(jù)的操作是通過流的方式。 Java中用于操作IO流的對象都放在java.io包中。 流的分類:按照操作數(shù)據(jù)分為:字符......