日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > java >内容正文

java

Java中的IO整理完整版(一)

發(fā)布時(shí)間:2023/12/16 java 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java中的IO整理完整版(一) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

【案例1】創(chuàng)建一個(gè)新文件

  • import?java.io.*; ?
  • class?hello{ ?
  • ????public?static?void?main(String[]?args)?{ ?
  • ????????File?f=new?File("D:\\hello.txt"); ?
  • ????????try{ ?
  • ????????????f.createNewFile(); ?
  • ????????}catch?(Exception?e)?{ ?
  • ????????????e.printStackTrace(); ?
  • ????????} ?
  • ????} ?
  • }?
  • 【運(yùn)行結(jié)果】:

    程序運(yùn)行之后,在d盤下會(huì)有一個(gè)名字為hello.txt的文件。

    【案例2】File類的兩個(gè)常量

  • import?java.io.*; ?
  • class?hello{ ?
  • ????public?static?void?main(String[]?args)?{ ?
  • ????????System.out.println(File.separator); ?
  • ????????System.out.println(File.pathSeparator); ?
  • ????} ?
  • }?
  • 【運(yùn)行結(jié)果】:
    \
    ;
    此處多說(shuō)幾句:有些同學(xué)可能認(rèn)為,我直接在windows下使用\進(jìn)行分割不行嗎?當(dāng)然是可以的。但是在linux下就不是\了。所以,要想使得我們的代碼跨平臺(tái),更加健壯,所以,大家都采用這兩個(gè)常量吧,其實(shí)也多寫不了幾行。呵呵、

    現(xiàn)在我們使用File類中的常量改寫上面的代碼:

  • import?java.io.*; ?
  • class?hello{ ?
  • ????public?static?void?main(String[]?args)?{ ?
  • ????????String?fileName="D:"+File.separator+"hello.txt"; ?
  • ????????File?f=new?File(fileName); ?
  • ????????try{ ?
  • ????????????f.createNewFile(); ?
  • ????????}catch?(Exception?e)?{ ?
  • ????????????e.printStackTrace(); ?
  • ????????} ?
  • ????} ?
  • }?
  • 你看,沒(méi)有多寫多少吧,呵呵。所以建議使用File類中的常量。

    刪除一個(gè)文件

  • /** ?
  • ?*?刪除一個(gè)文件 ?
  • ?*?*/?
  • import?java.io.*; ?
  • class?hello{ ?
  • ????public?static?void?main(String[]?args)?{ ?
  • ????????String?fileName="D:"+File.separator+"hello.txt"; ?
  • ????????File?f=new?File(fileName); ?
  • ????????if(f.exists()){ ?
  • ????????????f.delete(); ?
  • ????????}else{ ?
  • ????????????System.out.println("文件不存在"); ?
  • ????????} ?
  • ???????? ?
  • ????} ?
  • }?
  • 創(chuàng)建一個(gè)文件夾

  • /** ?
  • ?*?創(chuàng)建一個(gè)文件夾 ?
  • ?*?*/?
  • import?java.io.*; ?
  • class?hello{ ?
  • ????public?static?void?main(String[]?args)?{ ?
  • ????????String?fileName="D:"+File.separator+"hello"; ?
  • ????????File?f=new?File(fileName); ?
  • ????????f.mkdir(); ?
  • ????} ?
  • }?
  • 【運(yùn)行結(jié)果】:

    D盤下多了一個(gè)hello文件夾

    列出指定目錄的全部文件(包括隱藏文件):

  • /** ?
  • ?*?使用list列出指定目錄的全部文件 ?
  • ?*?*/?
  • import?java.io.*; ?
  • class?hello{ ?
  • ????public?static?void?main(String[]?args)?{ ?
  • ????????String?fileName="D:"+File.separator; ?
  • ????????File?f=new?File(fileName); ?
  • ????????String[]?str=f.list(); ?
  • ????????for?(int?i?=?0;?i?<?str.length;?i++)?{ ?
  • ????????????System.out.println(str[i]); ?
  • ????????} ?
  • ????} ?
  • }?
  • 【運(yùn)行結(jié)果】:

    $RECYCLE.BIN

    360

    360Downloads

    360Rec

    360SoftMove

    Config.Msi

    da

    Downloads

    DriversBackup

    eclipse

    java web整合開(kāi)發(fā)和項(xiàng)目實(shí)戰(zhàn)

    Lenovo

    MSOCache

    Program

    Program Files

    python

    RECYGLER.{8F92DA15-A229-A4D5-B5CE-5280C8B89C19}

    System Volume Information

    Tomcat6

    var

    vod_cache_data

    新建文件夾

    (你的運(yùn)行結(jié)果應(yīng)該和這個(gè)不一樣的,呵呵)

    但是使用list返回的是String數(shù)組,。而且列出的不是完整路徑,如果想列出完整路徑的話,需要使用listFiles.他返回的是File的數(shù)組

    列出指定目錄的全部文件(包括隱藏文件):

  • /** ?
  • ?*?使用listFiles列出指定目錄的全部文件 ?
  • ?*?listFiles輸出的是完整路徑 ?
  • ?*?*/?
  • import?java.io.*; ?
  • class?hello{ ?
  • ????public?static?void?main(String[]?args)?{ ?
  • ????????String?fileName="D:"+File.separator; ?
  • ????????File?f=new?File(fileName); ?
  • ????????File[]?str=f.listFiles(); ?
  • ????????for?(int?i?=?0;?i?<?str.length;?i++)?{ ?
  • ????????????System.out.println(str[i]); ?
  • ????????} ?
  • ????} ?
  • }?
  • 【運(yùn)行結(jié)果】:

    D:\$RECYCLE.BIN

    D:\360

    D:\360Downloads

    D:\360Rec

    D:\360SoftMove

    D:\Config.Msi

    D:\da

    D:\Downloads

    D:\DriversBackup

    D:\eclipse

    D:\java web整合開(kāi)發(fā)和項(xiàng)目實(shí)戰(zhàn)

    D:\Lenovo

    D:\MSOCache

    D:\Program

    D:\Program Files

    D:\python

    D:\RECYGLER.{8F92DA15-A229-A4D5-B5CE-5280C8B89C19}

    D:\System Volume Information

    D:\Tomcat6

    D:\var

    D:\vod_cache_data

    D:\新建文件夾

    通過(guò)比較可以指定,使用listFiles更加方便、

    判斷一個(gè)指定的路徑是否為目錄

  • /** ?
  • ?*?使用isDirectory判斷一個(gè)指定的路徑是否為目錄 ?
  • ?*?*/?
  • import?java.io.*; ?
  • class?hello{ ?
  • ????public?static?void?main(String[]?args)?{ ?
  • ????????String?fileName="D:"+File.separator; ?
  • ????????File?f=new?File(fileName); ?
  • ????????if(f.isDirectory()){ ?
  • ????????????System.out.println("YES"); ?
  • ????????}else{ ?
  • ????????????System.out.println("NO"); ?
  • ????????} ?
  • ????} ?
  • }?
  • 【運(yùn)行結(jié)果】:YES

    搜索指定目錄的全部?jī)?nèi)容

  • /** ?
  • ?*?列出指定目錄的全部?jī)?nèi)容 ?
  • ?*?*/?
  • import?java.io.*; ?
  • class?hello{ ?
  • ????public?static?void?main(String[]?args)?{ ?
  • ????????String?fileName="D:"+File.separator; ?
  • ????????File?f=new?File(fileName); ?
  • ????????print(f); ?
  • ????} ?
  • ????public?static?void?print(File?f){ ?
  • ????????if(f!=null){ ?
  • ????????????if(f.isDirectory()){ ?
  • ????????????????File[]?fileArray=f.listFiles(); ?
  • ????????????????if(fileArray!=null){ ?
  • ????????????????????for?(int?i?=?0;?i?<?fileArray.length;?i++)?{ ?
  • ????????????????????????//遞歸調(diào)用 ?
  • ????????????????????????print(fileArray[i]); ?
  • ????????????????????} ?
  • ????????????????} ?
  • ????????????} ?
  • ????????????else{ ?
  • ????????????????System.out.println(f); ?
  • ????????????} ?
  • ????????} ?
  • ????} ?
  • }?
  • 【運(yùn)行結(jié)果】:

    D:\Tomcat6\work\Catalina\localhost\nevel\org\apache\jsp\framepages\web4welcome_jsp.java

    D:\Tomcat6\work\Catalina\localhost\nevel\org\apache\jsp\help_005fhome_jsp.class

    D:\Tomcat6\work\Catalina\localhost\nevel\org\apache\jsp\help_005fhome_jsp.java

    D:\Tomcat6\work\Catalina\localhost\nevel\org\apache\jsp\home_jsp.class

    D:\Tomcat6\work\Catalina\localhost\nevel\org\apache\jsp\home_jsp.java

    D:\Tomcat6\work\Catalina\localhost\nevel\org\apache\jsp\index_jsp.class

    D:\Tomcat6\work\Catalina\localhost\nevel\org\apache\jsp\index_jsp.java

    D:\Tomcat6\work\Catalina\localhost\nevel\org\apache\jsp\login_jsp.class

    D:\Tomcat6\work\Catalina\localhost\nevel\org\apache\jsp\login_jsp.java

    D:\Tomcat6\work\Catalina\localhost\nevel\org\apache\jsp\modify_005fuser_005finfo_jsp.class

    D:\Tomcat6\work\Catalina\localhost\nevel\org\apache\jsp\modify_005fuser_005finfo_jsp.java

    D:\Tomcat6\work\Catalina\localhost\nevel\org\apache\jsp\register_005fnotify_jsp.class

    D:\Tomcat6\work\Catalina\localhost\nevel\org\apache\jsp\register_005fnotify_jsp.java

    D:\Tomcat6\work\Catalina\localhost\nevel\org\apache\jsp\sign_005fup_jsp.class

    D:\Tomcat6\work\Catalina\localhost\nevel\org\apache\jsp\sign_005fup_jsp.java

    D:\Tomcat6\work\Catalina\localhost\nevel\org\apache\jsp\transit_jsp.class

    ……

    【使用RandomAccessFile寫入文件】

  • /** ?
  • ?*?使用RandomAccessFile寫入文件 ?
  • ?*?*/?
  • import?java.io.*; ?
  • class?hello{ ?
  • ????public?static?void?main(String[]?args)?throws?IOException?{ ?
  • ????????String?fileName="D:"+File.separator+"hello.txt"; ?
  • ????????File?f=new?File(fileName); ?
  • ????????RandomAccessFile?demo=new?RandomAccessFile(f,"rw"); ?
  • ????????demo.writeBytes("asdsad"); ?
  • ????????demo.writeInt(12); ?
  • ????????demo.writeBoolean(true); ?
  • ????????demo.writeChar('A'); ?
  • ????????demo.writeFloat(1.21f); ?
  • ????????demo.writeDouble(12.123); ?
  • ????????demo.close();??? ?
  • ????} ?
  • }?
  • 如果你此時(shí)打開(kāi)hello。txt查看的話,會(huì)發(fā)現(xiàn)那是亂碼。

    字節(jié)流

    【向文件中寫入字符串】

  • /** ?
  • ?*?字節(jié)流 ?
  • ?*?向文件中寫入字符串 ?
  • ?*?*/?
  • import?java.io.*; ?
  • class?hello{ ?
  • ????public?static?void?main(String[]?args)?throws?IOException?{ ?
  • ????????String?fileName="D:"+File.separator+"hello.txt"; ?
  • ????????File?f=new?File(fileName); ?
  • ????????OutputStream?out?=new?FileOutputStream(f); ?
  • ????????String?str="你好"; ?
  • ????????byte[]?b=str.getBytes(); ?
  • ????????out.write(b); ?
  • ????????out.close(); ?
  • ????} ?
  • }?
  • 查看hello.txt會(huì)看到“你好”

    當(dāng)然也可以一個(gè)字節(jié)一個(gè)字節(jié)的寫。

  • /** ?
  • ?*?字節(jié)流 ?
  • ?*?向文件中一個(gè)字節(jié)一個(gè)字節(jié)的寫入字符串 ?
  • ?*?*/?
  • import?java.io.*; ?
  • class?hello{ ?
  • ????public?static?void?main(String[]?args)?throws?IOException?{ ?
  • ????????String?fileName="D:"+File.separator+"hello.txt"; ?
  • ????????File?f=new?File(fileName); ?
  • ????????OutputStream?out?=new?FileOutputStream(f); ?
  • ????????String?str="你好"; ?
  • ????????byte[]?b=str.getBytes(); ?
  • ????????for?(int?i?=?0;?i?<?b.length;?i++)?{ ?
  • ????????????out.write(b[i]); ?
  • ????????} ?
  • ????????out.close(); ?
  • ????} ?
  • }?
  • 結(jié)果還是:“你好”

    向文件中追加新內(nèi)容:

  • /** ?
  • ?*?字節(jié)流 ?
  • ?*?向文件中追加新內(nèi)容: ?
  • ?*?*/?
  • import?java.io.*; ?
  • class?hello{ ?
  • ????public?static?void?main(String[]?args)?throws?IOException?{ ?
  • ????????String?fileName="D:"+File.separator+"hello.txt"; ?
  • ????????File?f=new?File(fileName); ?
  • ????????OutputStream?out?=new?FileOutputStream(f,true); ?
  • ????????String?str="Rollen"; ?
  • ????????//String?str="\r\nRollen";??可以換行 ?
  • ????????byte[]?b=str.getBytes(); ?
  • ????????for?(int?i?=?0;?i?<?b.length;?i++)?{ ?
  • ????????????out.write(b[i]); ?
  • ????????} ?
  • ????????out.close(); ?
  • ????} ?
  • }?
  • 【運(yùn)行結(jié)果】:

    你好Rollen

    【讀取文件內(nèi)容】

  • /** ?
  • ?*?字節(jié)流 ?
  • ?*?讀文件內(nèi)容 ?
  • ?*?*/?
  • import?java.io.*; ?
  • class?hello{ ?
  • ????public?static?void?main(String[]?args)?throws?IOException?{ ?
  • ????????String?fileName="D:"+File.separator+"hello.txt"; ?
  • ????????File?f=new?File(fileName); ?
  • ????????InputStream?in=new?FileInputStream(f); ?
  • ????????byte[]?b=new?byte[1024]; ?
  • ????????in.read(b); ?
  • ????????in.close(); ?
  • ????????System.out.println(new?String(b)); ?
  • ????} ?
  • }?
  • 【運(yùn)行結(jié)果】
    你好Rollen

    Rollen_

    但是這個(gè)例子讀取出來(lái)會(huì)有大量的空格,我們可以利用in.read(b);的返回值來(lái)設(shè)計(jì)程序。如下:

  • /** ?
  • ?*?字節(jié)流 ?
  • ?*?讀文件內(nèi)容 ?
  • ?*?*/?
  • import?java.io.*; ?
  • class?hello{ ?
  • ????public?static?void?main(String[]?args)?throws?IOException?{ ?
  • ????????String?fileName="D:"+File.separator+"hello.txt"; ?
  • ????????File?f=new?File(fileName); ?
  • ????????InputStream?in=new?FileInputStream(f); ?
  • ????????byte[]?b=new?byte[1024]; ?
  • ????????int?len=in.read(b); ?
  • ????????in.close(); ?
  • ????????System.out.println("讀入長(zhǎng)度為:"+len); ?
  • ????????System.out.println(new?String(b,0,len)); ?
  • ????} ?
  • }?
  • 【運(yùn)行結(jié)果】:

    讀入長(zhǎng)度為:18

    你好Rollen

    Rollen

    讀者觀察上面的例子可以看出,我們預(yù)先申請(qǐng)了一個(gè)指定大小的空間,但是有時(shí)候這個(gè)空間可能太小,有時(shí)候可能太大,我們需要準(zhǔn)確的大小,這樣節(jié)省空間,那么我們可以這樣干:

  • /** ?
  • ?*?字節(jié)流 ?
  • ?*?讀文件內(nèi)容,節(jié)省空間 ?
  • ?*?*/?
  • import?java.io.*; ?
  • class?hello{ ?
  • ????public?static?void?main(String[]?args)?throws?IOException?{ ?
  • ????????String?fileName="D:"+File.separator+"hello.txt"; ?
  • ????????File?f=new?File(fileName); ?
  • ????????InputStream?in=new?FileInputStream(f); ?
  • ????????byte[]?b=new?byte[(int)f.length()]; ?
  • ????????in.read(b); ?
  • ????????System.out.println("文件長(zhǎng)度為:"+f.length()); ?
  • ????????in.close(); ?
  • ????????System.out.println(new?String(b)); ?
  • ????} ?
  • }?
  • 文件長(zhǎng)度為:18

    你好Rollen

    Rollen

    將上面的例子改為一個(gè)一個(gè)讀:

  • /** ?
  • ?*?字節(jié)流 ?
  • ?*?讀文件內(nèi)容,節(jié)省空間 ?
  • ?*?*/?
  • import?java.io.*; ?
  • class?hello{ ?
  • ????public?static?void?main(String[]?args)?throws?IOException?{ ?
  • ????????String?fileName="D:"+File.separator+"hello.txt"; ?
  • ????????File?f=new?File(fileName); ?
  • ????????InputStream?in=new?FileInputStream(f); ?
  • ????????byte[]?b=new?byte[(int)f.length()]; ?
  • ????????for?(int?i?=?0;?i?<?b.length;?i++)?{ ?
  • ????????????b[i]=(byte)in.read(); ?
  • ????????} ?
  • ????????in.close(); ?
  • ????????System.out.println(new?String(b)); ?
  • ????} ?
  • }?
  • 輸出的結(jié)果和上面的一樣。

    細(xì)心的讀者可能會(huì)發(fā)現(xiàn),上面的幾個(gè)例子都是在知道文件的內(nèi)容多大,然后才展開(kāi)的,有時(shí)候我們不知道文件有多大,這種情況下,我們需要判斷是否獨(dú)到文件的末尾。

  • /** ?
  • ?*?字節(jié)流 ?
  • ?*讀文件 ?
  • ?*?*/?
  • import?java.io.*; ?
  • class?hello{ ?
  • ????public?static?void?main(String[]?args)?throws?IOException?{ ?
  • ????????String?fileName="D:"+File.separator+"hello.txt"; ?
  • ????????File?f=new?File(fileName); ?
  • ????????InputStream?in=new?FileInputStream(f); ?
  • ????????byte[]?b=new?byte[1024]; ?
  • ????????int?count?=0; ?
  • ????????int?temp=0; ?
  • ????????while((temp=in.read())!=(-1)){ ?
  • ????????????b[count++]=(byte)temp; ?
  • ????????} ?
  • ????????in.close(); ?
  • ????????System.out.println(new?String(b)); ?
  • ????} ?
  • }?
  • 【運(yùn)行結(jié)果】

    你好Rollen

    Rollen_

    提醒一下,當(dāng)獨(dú)到文件末尾的時(shí)候會(huì)返回-1.正常情況下是不會(huì)返回-1的

    現(xiàn)在我們使用字符流

  • /** ?
  • ?*?字符流 ?
  • ?*?寫入數(shù)據(jù) ?
  • ?*?*/?
  • import?java.io.*; ?
  • class?hello{ ?
  • ????public?static?void?main(String[]?args)?throws?IOException?{ ?
  • ????????String?fileName="D:"+File.separator+"hello.txt"; ?
  • ????????File?f=new?File(fileName); ?
  • ????????Writer?out?=new?FileWriter(f); ?
  • ????????String?str="hello"; ?
  • ????????out.write(str); ?
  • ????????out.close(); ?
  • ????} ?
  • }?
  • 當(dāng)你打開(kāi)hello。txt的時(shí)候,會(huì)看到hello

    其實(shí)這個(gè)例子上之前的例子沒(méi)什么區(qū)別,只是你可以直接輸入字符串,而不需要你將字符串轉(zhuǎn)化為字節(jié)數(shù)組。

    當(dāng)你如果想問(wèn)文件中追加內(nèi)容的時(shí)候,可以使用將上面的聲明out的哪一行換為:

    Writer out =new FileWriter(f,true);

    這樣,當(dāng)你運(yùn)行程序的時(shí)候,會(huì)發(fā)現(xiàn)文件內(nèi)容變?yōu)?#xff1a;

    hellohello如果想在文件中換行的話,需要使用“\r\n”

    比如將str變?yōu)镾tring str="\r\nhello";

    這樣文件追加的str的內(nèi)容就會(huì)換行了。

    從文件中讀內(nèi)容:

  • /** ?
  • ?*?字符流 ?
  • ?*?從文件中讀出內(nèi)容 ?
  • ?*?*/?
  • import?java.io.*; ?
  • class?hello{ ?
  • ????public?static?void?main(String[]?args)?throws?IOException?{ ?
  • ????????String?fileName="D:"+File.separator+"hello.txt"; ?
  • ????????File?f=new?File(fileName); ?
  • ????????char[]?ch=new?char[100]; ?
  • ????????Reader?read=new?FileReader(f); ?
  • ????????int?count=read.read(ch); ?
  • ????????read.close(); ?
  • ????????System.out.println("讀入的長(zhǎng)度為:"+count); ?
  • ????????System.out.println("內(nèi)容為"+new?String(ch,0,count)); ?
  • ????} ?
  • }?
  • 【運(yùn)行結(jié)果】:

    讀入的長(zhǎng)度為:17

    內(nèi)容為hellohello

    hello

    當(dāng)然最好采用循環(huán)讀取的方式,因?yàn)槲覀冇袝r(shí)候不知道文件到底有多大。

  • /** ?
  • ?*?字符流 ?
  • ?*?從文件中讀出內(nèi)容 ?
  • ?*?*/?
  • import?java.io.*; ?
  • class?hello{ ?
  • ????public?static?void?main(String[]?args)?throws?IOException?{ ?
  • ????????String?fileName="D:"+File.separator+"hello.txt"; ?
  • ????????File?f=new?File(fileName); ?
  • ????????char[]?ch=new?char[100]; ?
  • ????????Reader?read=new?FileReader(f); ?
  • ????????int?temp=0; ?
  • ????????int?count=0; ?
  • ????????while((temp=read.read())!=(-1)){ ?
  • ????????????ch[count++]=(char)temp; ?
  • ????????} ?
  • ????????read.close(); ?
  • ????????System.out.println("內(nèi)容為"+new?String(ch,0,count)); ?
  • ????} ?
  • }?
  • 運(yùn)行結(jié)果:

    內(nèi)容為hellohello

    hello

    關(guān)于字節(jié)流和字符流的區(qū)別

    實(shí)際上字節(jié)流在操作的時(shí)候本身是不會(huì)用到緩沖區(qū)的,是文件本身的直接操作的,但是字符流在操作的 時(shí)候下后是會(huì)用到緩沖區(qū)的,是通過(guò)緩沖區(qū)來(lái)操作文件的。

    讀者可以試著將上面的字節(jié)流和字符流的程序的最后一行關(guān)閉文件的代碼注釋掉,然后運(yùn)行程序看看。你就會(huì)發(fā)現(xiàn)使用字節(jié)流的話,文件中已經(jīng)存在內(nèi)容,但是使用字符流的時(shí)候,文件中還是沒(méi)有內(nèi)容的,這個(gè)時(shí)候就要刷新緩沖區(qū)。

    使用字節(jié)流好還是字符流好呢?

    答案是字節(jié)流。首先因?yàn)橛脖P上的所有文件都是以字節(jié)的形式進(jìn)行傳輸或者保存的,包括圖片等內(nèi)容。但是字符只是在內(nèi)存中才會(huì)形成的,所以在開(kāi)發(fā)中,字節(jié)流使用廣泛。

    文件的復(fù)制

    其實(shí)DOS下就有一個(gè)文件復(fù)制功能,比如我們想把d盤下面的hello.txt文件復(fù)制到d盤下面的rollen.txt文件中,那么我們就可以使用下面的命令:

    copy d:\hello.txt d:\rollen.txt

    運(yùn)行之后你會(huì)在d盤中看見(jiàn)hello.txt.,并且兩個(gè)文件的內(nèi)容是一樣的,(這是屁話)

    下面我們使用程序來(lái)復(fù)制文件吧。

    基本思路還是從一個(gè)文件中讀入內(nèi)容,邊讀邊寫入另一個(gè)文件,就是這么簡(jiǎn)單。、

    首先編寫下面的代碼:

  • /** ?
  • ?*?文件的復(fù)制 ?
  • ?*?*/?
  • import?java.io.*; ?
  • class?hello{ ?
  • ????public?static?void?main(String[]?args)?throws?IOException?{ ?
  • ????????if(args.length!=2){ ?
  • ????????????System.out.println("命令行參數(shù)輸入有誤,請(qǐng)檢查"); ?
  • ????????????System.exit(1); ?
  • ????????} ?
  • ????????File?file1=new?File(args[0]); ?
  • ????????File?file2=new?File(args[1]); ?
  • ???????? ?
  • ????????if(!file1.exists()){ ?
  • ????????????System.out.println("被復(fù)制的文件不存在"); ?
  • ????????????System.exit(1); ?
  • ????????} ?
  • ????????InputStream?input=new?FileInputStream(file1); ?
  • ????????OutputStream?output=new?FileOutputStream(file2); ?
  • ????????if((input!=null)&&(output!=null)){ ?
  • ????????????int?temp=0; ?
  • ????????????while((temp=input.read())!=(-1)){ ?
  • ????????????????output.write(temp); ?
  • ????????????} ?
  • ????????} ?
  • ????????input.close(); ?
  • ????????output.close();? ?
  • ????} ?
  • }?
  • 然后在命令行下面

    javac hello.java

    java hello d:\hello.txt d:\rollen.txt

    現(xiàn)在你就會(huì)在d盤看到rollen。txt了,

    OutputStreramWriter 和InputStreamReader類

    整個(gè)IO類中除了字節(jié)流和字符流還包括字節(jié)和字符轉(zhuǎn)換流。

    OutputStreramWriter將輸出的字符流轉(zhuǎn)化為字節(jié)流

    InputStreamReader將輸入的字節(jié)流轉(zhuǎn)換為字符流

    但是不管如何操作,最后都是以字節(jié)的形式保存在文件中的。

    將字節(jié)輸出流轉(zhuǎn)化為字符輸出流

  • /** ?
  • ?*?將字節(jié)輸出流轉(zhuǎn)化為字符輸出流 ?
  • ?*?*/?
  • import?java.io.*; ?
  • class?hello{ ?
  • ????public?static?void?main(String[]?args)?throws?IOException?{ ?
  • ????????String?fileName=?"d:"+File.separator+"hello.txt"; ?
  • ????????File?file=new?File(fileName); ?
  • ????????Writer?out=new?OutputStreamWriter(new?FileOutputStream(file)); ?
  • ????????out.write("hello"); ?
  • ????????out.close(); ?
  • ????} ?
  • }?
  • 運(yùn)行結(jié)果:文件中內(nèi)容為:hello

    將字節(jié)輸入流變?yōu)樽址斎肓?/p>

  • /** ?
  • ?*?將字節(jié)輸入流變?yōu)樽址斎肓??
  • ?*?*/?
  • import?java.io.*; ?
  • class?hello{ ?
  • ????public?static?void?main(String[]?args)?throws?IOException?{ ?
  • ????????String?fileName=?"d:"+File.separator+"hello.txt"; ?
  • ????????File?file=new?File(fileName); ?
  • ????????Reader?read=new?InputStreamReader(new?FileInputStream(file)); ?
  • ????????char[]?b=new?char[100]; ?
  • ????????int?len=read.read(b); ?
  • ????????System.out.println(new?String(b,0,len)); ?
  • ????????read.close(); ?
  • ????} ?
  • }?
  • 【運(yùn)行結(jié)果】:hello

    前面列舉的輸出輸入都是以文件進(jìn)行的,現(xiàn)在我們以內(nèi)容為輸出輸入目的地,使用內(nèi)存操作流

    ByteArrayInputStream 主要將內(nèi)容寫入內(nèi)容

    ByteArrayOutputStream 主要將內(nèi)容從內(nèi)存輸出

    使用內(nèi)存操作流將一個(gè)大寫字母轉(zhuǎn)化為小寫字母

  • /** ?
  • ?*?使用內(nèi)存操作流將一個(gè)大寫字母轉(zhuǎn)化為小寫字母 ?
  • ?*?*/?
  • import?java.io.*; ?
  • class?hello{ ?
  • ????public?static?void?main(String[]?args)?throws?IOException?{ ?
  • ????????String?str="ROLLENHOLT"; ?
  • ????????ByteArrayInputStream?input=new?ByteArrayInputStream(str.getBytes()); ?
  • ????????ByteArrayOutputStream?output=new?ByteArrayOutputStream(); ?
  • ????????int?temp=0; ?
  • ????????while((temp=input.read())!=-1){ ?
  • ????????????char?ch=(char)temp; ?
  • ????????????output.write(Character.toLowerCase(ch)); ?
  • ????????} ?
  • ????????String?outStr=output.toString(); ?
  • ????????input.close(); ?
  • ????????output.close(); ?
  • ????????System.out.println(outStr); ?
  • ????} ?
  • }?
  • 【運(yùn)行結(jié)果】:

    rollenholt

    內(nèi)容操作流一般使用來(lái)生成一些臨時(shí)信息采用的,這樣可以避免刪除的麻煩。

    管道流

    管道流主要可以進(jìn)行兩個(gè)線程之間的通信。

    PipedOutputStream 管道輸出流

    PipedInputStream 管道輸入流

    驗(yàn)證管道流

  • /** ?
  • ?*?驗(yàn)證管道流 ?
  • ?*?*/?
  • import?java.io.*; ?
  • ?
  • /** ?
  • ?*?消息發(fā)送類 ?
  • ?*?*/?
  • class?Send?implements?Runnable{ ?
  • ????private?PipedOutputStream?out=null; ?
  • ????public?Send()?{ ?
  • ????????out=new?PipedOutputStream(); ?
  • ????} ?
  • ????public?PipedOutputStream?getOut(){ ?
  • ????????return?this.out; ?
  • ????} ?
  • ????public?void?run(){ ?
  • ????????String?message="hello?,?Rollen"; ?
  • ????????try{ ?
  • ????????????out.write(message.getBytes()); ?
  • ????????}catch?(Exception?e)?{ ?
  • ????????????e.printStackTrace(); ?
  • ????????}try{ ?
  • ????????????out.close(); ?
  • ????????}catch?(Exception?e)?{ ?
  • ????????????e.printStackTrace(); ?
  • ????????} ?
  • ????} ?
  • } ?
  • ?
  • /** ?
  • ?*?接受消息類 ?
  • ?*?*/?
  • class?Recive?implements?Runnable{ ?
  • ????private?PipedInputStream?input=null; ?
  • ????public?Recive(){ ?
  • ????????this.input=new?PipedInputStream(); ?
  • ????} ?
  • ????public?PipedInputStream?getInput(){ ?
  • ????????return?this.input; ?
  • ????} ?
  • ????public?void?run(){ ?
  • ????????byte[]?b=new?byte[1000]; ?
  • ????????int?len=0; ?
  • ????????try{ ?
  • ????????????len=this.input.read(b); ?
  • ????????}catch?(Exception?e)?{ ?
  • ????????????e.printStackTrace(); ?
  • ????????}try{ ?
  • ????????????input.close(); ?
  • ????????}catch?(Exception?e)?{ ?
  • ????????????e.printStackTrace(); ?
  • ????????} ?
  • ????????System.out.println("接受的內(nèi)容為?"+(new?String(b,0,len))); ?
  • ????} ?
  • } ?
  • /** ?
  • ?*?測(cè)試類 ?
  • ?*?*/?
  • class?hello{ ?
  • ????public?static?void?main(String[]?args)?throws?IOException?{ ?
  • ????????Send?send=new?Send(); ?
  • ????????Recive?recive=new?Recive(); ?
  • ????????try{ ?
  • //管道連接 ?
  • ????????????send.getOut().connect(recive.getInput()); ?
  • ????????}catch?(Exception?e)?{ ?
  • ????????????e.printStackTrace(); ?
  • ????????} ?
  • ????????new?Thread(send).start(); ?
  • ????????new?Thread(recive).start(); ?
  • ????} ?
  • }?
  • 【運(yùn)行結(jié)果】:
    ?

    接受的內(nèi)容為 hello , Rollen

    打印流

  • /** ?
  • ?*?使用PrintStream進(jìn)行輸出 ?
  • ?*?*/?
  • import?java.io.*; ?
  • ?
  • class?hello?{ ?
  • ????public?static?void?main(String[]?args)?throws?IOException?{ ?
  • ????????PrintStream?print?=?new?PrintStream(new?FileOutputStream(new?File("d:"?
  • ????????????????+?File.separator?+?"hello.txt"))); ?
  • ????????print.println(true); ?
  • ????????print.println("Rollen"); ?
  • ????????print.close(); ?
  • ????} ?
  • }?
  • 【運(yùn)行結(jié)果】:

    true

    Rollen

    當(dāng)然也可以格式化輸出

  • /** ?
  • ?*?使用PrintStream進(jìn)行輸出 ?
  • ?*?并進(jìn)行格式化 ?
  • ?*?*/?
  • import?java.io.*; ?
  • class?hello?{ ?
  • ????public?static?void?main(String[]?args)?throws?IOException?{ ?
  • ????????PrintStream?print?=?new?PrintStream(new?FileOutputStream(new?File("d:"?
  • ????????????????+?File.separator?+?"hello.txt"))); ?
  • ????????String?name="Rollen"; ?
  • ????????int?age=20; ?
  • ????????print.printf("姓名:%s.?年齡:%d.",name,age); ?
  • ????????print.close(); ?
  • ????} ?
  • }?
  • 【運(yùn)行結(jié)果】:

    姓名:Rollen. 年齡:20.

    使用OutputStream向屏幕上輸出內(nèi)容

  • /** ?
  • ?*?使用OutputStream向屏幕上輸出內(nèi)容? ?
  • ?*?*/?
  • import?java.io.*; ?
  • class?hello?{ ?
  • ????public?static?void?main(String[]?args)?throws?IOException?{ ?
  • ????????OutputStream?out=System.out; ?
  • ????????try{ ?
  • ????????????out.write("hello".getBytes()); ?
  • ????????}catch?(Exception?e)?{ ?
  • ????????????e.printStackTrace(); ?
  • ????????} ?
  • ????????try{ ?
  • ????????????out.close(); ?
  • ????????}catch?(Exception?e)?{ ?
  • ????????????e.printStackTrace(); ?
  • ????????} ?
  • ????} ?
  • }?
  • 【運(yùn)行結(jié)果】:

    hello

    輸入輸出重定向

  • import?java.io.File; ?
  • import?java.io.FileNotFoundException; ?
  • import?java.io.FileOutputStream; ?
  • import?java.io.PrintStream; ?
  • ?
  • /** ?
  • ?*?為System.out.println()重定向輸出 ?
  • ?*?*/?
  • public?class?systemDemo{ ?
  • ????public?static?void?main(String[]?args){ ?
  • ????????//?此刻直接輸出到屏幕 ?
  • ????????System.out.println("hello"); ?
  • ????????File?file?=?new?File("d:"?+?File.separator?+?"hello.txt"); ?
  • ????????try{ ?
  • ????????????System.setOut(new?PrintStream(new?FileOutputStream(file))); ?
  • ????????}catch(FileNotFoundException?e){ ?
  • ????????????e.printStackTrace(); ?
  • ????????} ?
  • ????????System.out.println("這些內(nèi)容在文件中才能看到哦!"); ?
  • ????} ?
  • }?
  • 【運(yùn)行結(jié)果】:

    eclipse的控制臺(tái)輸出的是hello。然后當(dāng)我們查看d盤下面的hello.txt文件的時(shí)候,會(huì)在里面看到:這些內(nèi)容在文件中才能看到哦!

  • import?java.io.File; ?
  • import?java.io.FileNotFoundException; ?
  • import?java.io.FileOutputStream; ?
  • import?java.io.PrintStream; ?
  • ?
  • /** ?
  • ?*?System.err重定向?這個(gè)例子也提示我們可以使用這種方法保存錯(cuò)誤信息 ?
  • ?*?*/?
  • public?class?systemErr{ ?
  • ????public?static?void?main(String[]?args){ ?
  • ????????File?file?=?new?File("d:"?+?File.separator?+?"hello.txt"); ?
  • ????????System.err.println("這些在控制臺(tái)輸出"); ?
  • ????????try{ ?
  • ????????????System.setErr(new?PrintStream(new?FileOutputStream(file))); ?
  • ????????}catch(FileNotFoundException?e){ ?
  • ????????????e.printStackTrace(); ?
  • ????????} ?
  • ????????System.err.println("這些在文件中才能看到哦!"); ?
  • ????} ?
  • }?
  • 【運(yùn)行結(jié)果】:

    你會(huì)在eclipse的控制臺(tái)看到紅色的輸出:“這些在控制臺(tái)輸出”,然后在d盤下面的hello.txt中會(huì)看到:這些在文件中才能看到哦!

  • import?java.io.File; ?
  • import?java.io.FileInputStream; ?
  • import?java.io.FileNotFoundException; ?
  • import?java.io.IOException; ?
  • ?
  • /** ?
  • ?*?System.in重定向 ?
  • ?*?*/?
  • public?class?systemIn{ ?
  • ????public?static?void?main(String[]?args){ ?
  • ????????File?file?=?new?File("d:"?+?File.separator?+?"hello.txt"); ?
  • ????????if(!file.exists()){ ?
  • ????????????return; ?
  • ????????}else{ ?
  • ????????????try{ ?
  • ????????????????System.setIn(new?FileInputStream(file)); ?
  • ????????????}catch(FileNotFoundException?e){ ?
  • ????????????????e.printStackTrace(); ?
  • ????????????} ?
  • ????????????byte[]?bytes?=?new?byte[1024]; ?
  • ????????????int?len?=?0; ?
  • ????????????try{ ?
  • ????????????????len?=?System.in.read(bytes); ?
  • ????????????}catch(IOException?e){ ?
  • ????????????????e.printStackTrace(); ?
  • ????????????} ?
  • ????????????System.out.println("讀入的內(nèi)容為:"?+?new?String(bytes,?0,?len)); ?
  • ????????} ?
  • ????} ?
  • }?
  • 【運(yùn)行結(jié)果】:

    前提是我的d盤下面的hello.txt中的內(nèi)容是:“這些文件中的內(nèi)容哦!”,然后運(yùn)行程序,輸出的結(jié)果為:讀入的內(nèi)容為:這些文件中的內(nèi)容哦!

    轉(zhuǎn)自:http://zhaohe162.blog.163.com/blog/static/3821679720118309710914/

    轉(zhuǎn)載于:https://www.cnblogs.com/hnrainll/archive/2012/01/18/2325844.html

    總結(jié)

    以上是生活随笔為你收集整理的Java中的IO整理完整版(一)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。