文件的相關(guān)操作

今天對(duì)于Java中的文件的一些概念及用法來進(jìn)行相關(guān)的學(xué)習(xí)掂林。

技術(shù):
  • 文件的讀寫
實(shí)際學(xué)習(xí):

其實(shí)文件的操作很簡(jiǎn)單伟葫,就是讀取文件刻坊,寫入文件。但在這之前醋虏,我們要先確定文件是否存在寻咒,如果不存在,就要?jiǎng)?chuàng)建一個(gè)文件颈嚼。創(chuàng)建文件毛秘,寫入數(shù)據(jù),保存數(shù)據(jù)阻课,關(guān)閉文件叫挟。下次重新打開的時(shí)候,讀取內(nèi)容抹恳。
文件有一個(gè)專門的類署驻,在Java中一切皆對(duì)象旺上。在Java中文件對(duì)應(yīng)的類是File。我們所需的是這個(gè)File.io流
File文件的操作:
1.//讀取文件的內(nèi)容

//I\O流
     //流的方向:參考的是自己的內(nèi)存空間
     //輸出流:從內(nèi)存空間將數(shù)據(jù)寫到外部設(shè)備(磁盤扬跋、硬盤钦听、光盤)
     //輸入流:將外部數(shù)據(jù)寫到內(nèi)存中

     //流:統(tǒng)一的管理數(shù)據(jù)的寫入和讀取
     //輸出流:開發(fā)者只需要將內(nèi)存里面的數(shù)據(jù)寫到流里面
     //輸入流:或者從流里面讀取數(shù)據(jù)

     //輸出流:OutputStream(字節(jié)流)   Writer字符流
     //輸入流:InputStream(字節(jié)流)   Reader字符流

     //I\O流對(duì)象不屬于內(nèi)存對(duì)象朴上,需要自己關(guān)閉
     //OutputStream和InputStream都是抽象類 不能直接使用

//   實(shí)際操作的子類:
     //FileOutputStream/FileInputStream
     //ObjectOutputStream/ObjectInputStream

     //FileWriter/FileReader
18.png

這個(gè)圖就顯示了在Java里面的文件的讀寫的一個(gè)基本過程痪宰。
藍(lán)色的箭頭由內(nèi)存指向外部設(shè)備,這里代表的是文件的寫入乖订。從內(nèi)存空間將數(shù)據(jù)寫到外部設(shè)備(磁盤乍构、硬盤、光盤)哥遮。反之陵究,紅色的就是文件的讀取,從外部的設(shè)備讀取文件的數(shù)據(jù) 傳到內(nèi)存里面進(jìn)行加載仪召。


19.PNG

在數(shù)據(jù)的寫入和寫出時(shí)牲距,通過的就是流來實(shí)現(xiàn)钥庇。當(dāng)我們的從內(nèi)存中拿數(shù)據(jù)傳給外部設(shè)備(磁盤,光盤难述,投影儀等等)的時(shí)候胁后,分別都需要它們自己的傳遞方式才能傳遞給它們嗦枢。對(duì)于程序而言文虏,所需要的是一個(gè)統(tǒng)一性的操作,通過訪問這個(gè)操作年鸳,來給不同的外部設(shè)備傳遞數(shù)據(jù)搔确。那么這個(gè)統(tǒng)一性的操作就是Stream,就是所謂的流,來封裝數(shù)據(jù)的讀取和寫入座硕。封裝成流之后畦幢,我們只管把數(shù)據(jù)寫到流里面去宇葱,系統(tǒng)已經(jīng)幫我們實(shí)現(xiàn)這個(gè)流怎么寫入和寫出瘦真。流就是高度的統(tǒng)一。
接下來是我在創(chuàng)建文件時(shí)所寫的一些代碼诸尽。
1.創(chuàng)建文件:

public class MyClass {
    public static void main(String[] args) throws IOException, ClassNotFoundException {
        //創(chuàng)建文件  完整路徑
        String path="D:\\android study\\yjx1\\src\\main\\java\\swu\\yjx\\day8";

        File file=new File(path.concat("/1.txt"));

        //判斷是否存在
        if(file.exists()==false) {
            //不存在就創(chuàng)建
                file.createNewFile();
        }

寫入字節(jié)流

 //向文件里面寫入數(shù)據(jù)
        //1.創(chuàng)建文件輸出流對(duì)象
       FileOutputStream fos=new FileOutputStream(file);

        //2.調(diào)用write方法寫入
        byte[] text={'1','2','3','4'};
        fos.write(text);

        //3.操作完畢需要關(guān)閉stream對(duì)象

        fos.close();
//讀取內(nèi)容
        FileInputStream fis=new FileInputStream(file);

        byte[] name=new byte[12];

        fis.read(name);

        fis.close();

        System.out.println(new String(name));

寫入字符流

 //向文件寫入數(shù)據(jù)-字符流
        FileWriter fw=new FileWriter(file);

        char[] name={'a','b','c','d'};

        fw.write(name);
        fw.close();
//讀取字符流
 FileReader fr=new FileReader(file);
        char[] book=new char[4];
        int
                count=fr.read(book);

        fr.close();
        System.out.print(count+""+new String(book));

//向文件里面存一個(gè)對(duì)象
//序列化 serializable(接口)
//如果要將一個(gè)對(duì)象保存起來印颤,必須實(shí)現(xiàn)Serializable接口
//如果對(duì)象內(nèi)部還有屬性變量是其他類的對(duì)象 這個(gè)類也必須實(shí)現(xiàn)Serializable接口
保存對(duì)象:

Perason xw=new Perason();
        xw.name="小王";
        xw.age=23;

        OutputStream os=new FileOutputStream(file);
        ObjectOutputStream oos=new ObjectOutputStream(os);
        oos.writeObject(xw);
        oos.close();
//從文件里面讀取對(duì)象
        InputStream is=new FileInputStream(file) ;
        ObjectInputStream ois=new ObjectInputStream(is);
        Perason xw=(Perason) ois.readObject();

        System.out.print(xw.name+""+xw.age);

        ois.close();

這里是將一張圖片copy到了另一個(gè)位置您机。一般都可以用文件來保存圖片和視頻。對(duì)于其他較大的數(shù)據(jù)际看,則是由系統(tǒng)的數(shù)據(jù)庫來維持。

//將一個(gè)文件copy到另一個(gè)位置
        //要知道1.源文件的路徑
        String sourcePath="C:\\Users\\DAMEI\\Desktop\\1.jpg";

        //2.目標(biāo)文件的路徑
        String desPath="D:\\android study\\yjx1\\src\\main\\java\\swu\\yjx\\day8\\1.jpg";

        //3.圖片的話用 字節(jié)
        FileInputStream fis = new FileInputStream(sourcePath);//輸出流
        FileOutputStream fos = new FileOutputStream(desPath);//輸入流

        byte[] in = new byte[1024];

        while (true) {
            int count = fis.read(in);
            if (count !=-1){
                //讀取到內(nèi)容了
                //將這次讀取的內(nèi)容寫入到目標(biāo)文件
                fos.write(in,0,count);
            }else {
                break;
            }
        }
           fis.close();
           fos.close();

使?用BufferedInputStream和BufferedOutputStream提?高 讀寫的速度

long start=System.currentTimeMillis();
        String sourcePath="C:\\Users\\DAMEI\\Desktop\\1.jpg";
        String desPath="D:\\android study\\yjx1\\src\\main\\java\\swu\\yjx\\day8\\1.jpg";

        InputStream is=new FileInputStream(sourcePath);
        BufferedInputStream bis = new BufferedInputStream(is);

        OutputStream os=new FileOutputStream(desPath);
        BufferedOutputStream bos = new BufferedOutputStream(os);//BufferedOutputStream 自己定義了一個(gè)字節(jié)數(shù)組

        byte[] in = new byte[1024];
        int count=0;
        while ((count=bis.read(in))!=-1){
            bos.write(in,0,count);
        }

        bis.close();
        bos.close();
        long end=System.currentTimeMillis();
        System.out.println(end-start);

這里對(duì)于較小的數(shù)據(jù)來說可能讀寫速度想差不大矢否,但對(duì)于較大的而言仲闽,就有差距了。
今天對(duì)于Java中的文件的讀寫就闡述到這了僵朗,感謝大家的觀看赖欣,多多支持!Q槊怼!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末粪薛,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子湃交,更是在濱河造成了極大的恐慌巡揍,老刑警劉巖腮敌,帶你破解...
    沈念sama閱讀 211,376評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡捌木,警方通過查閱死者的電腦和手機(jī)油坝,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,126評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來刨裆,“玉大人澈圈,你說我怎么就攤上這事》校” “怎么了瞬女?”我有些...
    開封第一講書人閱讀 156,966評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)努潘。 經(jīng)常有香客問我诽偷,道長(zhǎng),這世上最難降的妖魔是什么疯坤? 我笑而不...
    開封第一講書人閱讀 56,432評(píng)論 1 283
  • 正文 為了忘掉前任报慕,我火速辦了婚禮,結(jié)果婚禮上压怠,老公的妹妹穿的比我還像新娘眠冈。我一直安慰自己,他們只是感情好刑峡,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,519評(píng)論 6 385
  • 文/花漫 我一把揭開白布洋闽。 她就那樣靜靜地躺著玄柠,像睡著了一般突梦。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上羽利,一...
    開封第一講書人閱讀 49,792評(píng)論 1 290
  • 那天宫患,我揣著相機(jī)與錄音,去河邊找鬼这弧。 笑死娃闲,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的匾浪。 我是一名探鬼主播皇帮,決...
    沈念sama閱讀 38,933評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼蛋辈!你這毒婦竟也來了属拾?” 一聲冷哼從身側(cè)響起将谊,我...
    開封第一講書人閱讀 37,701評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎渐白,沒想到半個(gè)月后尊浓,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,143評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡纯衍,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,488評(píng)論 2 327
  • 正文 我和宋清朗相戀三年栋齿,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片襟诸。...
    茶點(diǎn)故事閱讀 38,626評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡瓦堵,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出歌亲,到底是詐尸還是另有隱情谷丸,我是刑警寧澤,帶...
    沈念sama閱讀 34,292評(píng)論 4 329
  • 正文 年R本政府宣布应结,位于F島的核電站刨疼,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏鹅龄。R本人自食惡果不足惜揩慕,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,896評(píng)論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望扮休。 院中可真熱鬧迎卤,春花似錦、人聲如沸玷坠。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,742評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽八堡。三九已至樟凄,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間兄渺,已是汗流浹背缝龄。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評(píng)論 1 265
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留挂谍,地道東北人叔壤。 一個(gè)月前我還...
    沈念sama閱讀 46,324評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像口叙,于是被迫代替她去往敵國(guó)和親炼绘。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,494評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容