亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

文件傳輸基礎——Java IO流

難度入門
時長 2小時 0分
學習人數
綜合評分9.67
669人評價 查看評價
9.9 內容實用
9.6 簡潔易懂
9.5 邏輯清晰
  • File.list()方法用于列出當前目錄下的子目錄和文件,獲取該目錄下的所有文件?


    File.listFiles()返回的是直接子目錄(文件)的抽象,獲取該目錄下所有文件和目錄的絕對路徑


    通過list()方法獲取的結果:

    20140713155846393


    通過listFiles()方法獲取的結果:

    20140713155615781

    圖轉自博客:bingguang1993

    查看全部
    0 采集 收起 來源:遍歷目錄

    2020-01-31

  • File file=new File("E:\\javaio\\imooc"),“\\”或“//”是中間的分隔符,也可以用File.separator。

    file.exists()跟其字面意思一樣,用于判斷文件知否存在

    file.mkdir()可以直接創建文件夾(E:\\javaio\\imooc),file.mkdirs()可以創建多級目錄,file.createNewFile()可以直接創建文件("E:\\javaio\\日記1.txt"),配合exists做個if else判斷比較好

    file.delete()刪除

    file.isDirectory()判斷是否是一個目錄,是返回true,不是目錄或者目錄不存在返回false,file.isFile()判讀是否是一個文件

    File file2=new File("E:\\javaio","日記1.txt")是另一個構造函數,第一個參數代表目錄,第二個代表文件

    以下為幾種File類中簡單的方法

    查看全部
  • 1.Integer.toHexString(byte)把字節(轉換成了int)以16進制的方式顯示 ,byte轉換成int相當于int后八位為byte原來的,后八位前24位加上24個0,


    2.Integer.toHexString(byte%0xff)?把前頭的0取掉,只留下后八位


    3.轉換成字節序列用的是項目默認的編碼gbk,中文占用2個字節,英文占用1個字節


    4.byte[] byte=s.getBytes()是用默認編碼,byte[] byte=s.getBytes(參數)是用參數指定的編碼(參數為:“某種編碼”)


    5.utf-8編碼中文占用3個字節,英文占用1個字節


    6.java是雙字節編碼,utf-16be編碼,字符串一個字符占兩個字節, 中文占用2個字節,英文占用2個字節。


    7.當你的字節序列式某種編碼時,這個時候想把字節序列變成字符串,也需要用這種編碼方式,否則會出現亂碼。String str1=new String(byte):用項目默認的編碼,String str2=new String(byte,參數):用參數指定的編碼。比如byte[] byte=String.getBytes("utf-8"),那么將此字節序列變成字符串就要用String str=new Stirng(byte,"utf-8")。用gbk編碼的字節序列直接用第一種不指定編碼參數的方法即可,因為默認的就是用gbk編碼所以不用gbk編碼


    8.文本文件就是字節序列,可以是任意編碼的字節序列。如果我們在中文機器上直接創建文本文件,那么該文本文件只認識ansi編碼,中文系統下,ansi編碼代表gbk編碼


    9.中文機器上你直接創建一個文本文件,那么它只能認識ansi編碼(gbk),但是文本文件本身可以放各種編碼,直接粘貼到中文機器上的無論編碼是哪種它都認識,只不過在中文機器上直接創建時會有這個特殊性。


    10.某個項目的文本文件只認識項目指定的編碼,換一種別的編碼他就不認識了。比如你把用utf-8編碼的A項目下的文本文件直接拷貝到使用默認編碼gbk的B項目下,拷貝的文件里就會出現亂碼,但如果只是把A項目文本文件中的內容拷貝到B項目下的文本文件中,他會自動進行轉換

    查看全部
    0 采集 收起 來源:文件的編碼

    2020-01-31

  • 一個類實現了序列化接口,那么其子類都可以進行序列化

    查看全部
  • package com.imooc.io;


    import java.io.FileInputStream;

    import java.io.ObjectInputStream;


    public class ObjectSeriaDemo1 {

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

    String file = "demo/obj.dat";

    //1.對象的序列化

    /*ObjectOutputStream oos = new ObjectOutputStream(

    new FileOutputStream(file));

    Student stu = new Student("10001", "張三", 20);

    oos.writeObject(stu);

    oos.flush();

    oos.close();*/

    ObjectInputStream ois = new ObjectInputStream(

    new FileInputStream(file));

    Student stu = (Student)ois.readObject();

    System.out.println(stu);

    ois.close();

    }


    }


    查看全部

  • package com.imooc.io;

    import java.io.Serializable;

    public class Student implements Serializable{

    private String stuno;

    private String stuname;

    //該元素不會進行jvm默認的序列化,也可以自己完成這個元素的序列化

    private transient int stuage;??

    public Student(String stuno, String stuname, int stuage) {

    super();

    this.stuno = stuno;

    this.stuname = stuname;

    this.stuage = stuage;

    }

    public String getStuno() {

    return stuno;

    }

    public void setStuno(String stuno) {

    this.stuno = stuno;

    }

    public String getStuname() {

    return stuname;

    }

    public void setStuname(String stuname) {

    this.stuname = stuname;

    }

    public int getStuage() {

    return stuage;

    }

    public void setStuage(int stuage) {

    this.stuage = stuage;

    }

    @Override

    public String toString() {

    return "Student [stuno=" + stuno + ", stuname=" + stuname + ", stuage="

    + stuage + "]";

    }

    private void writeObject(java.io.ObjectOutputStream s)

    ? ? ? ? throws java.io.IOException{

    s.defaultWriteObject();//把jvm能默認序列化的元素進行序列化操作

    s.writeInt(stuage);//自己完成stuage的序列化

    }

    private void readObject(java.io.ObjectInputStream s)

    ? ? ? ? throws java.io.IOException, ClassNotFoundException{

    ? s.defaultReadObject();//把jvm能默認反序列化的元素進行反序列化操作

    ? this.stuage = s.readInt();//自己完成stuage的反序列化操作

    }

    }

    查看全部
  • ?

    java.io.File類用于表示文件(目錄)

    File類只用于表示文件(目錄)的信息(名稱、大小等),不能用于文件內容的訪問


    RandomAccessFile java提供的對文件內容的訪問,既可以讀文件,也可以寫文件。

    RandomAccessFile支持隨機訪問文件,可以訪問文件的任意位置


    (1)java文件模型

    ? 在硬盤上的文件是byte byte byte存儲的,是數據的集合

    (2)打開文件

    ? 有兩種模式"rw"(讀寫)? "r"(只讀)

    ? RandomAccessFile raf = new RandomeAccessFile(file,"rw")

    ? 文件指針,打開文件時指針在開頭 pointer = 0;

    (3) 寫方法

    ? ? raf.write(int)--->只寫一個字節(后8位),同時指針指向下一個位置,準備再次寫入

    (4)讀方法

    ? ?int b = raf.read()--->讀一個字節

    (5)文件讀寫完成以后一定要關閉(Oracle官方說明)



    序列化與基本類型序列化

    1)將類型int 轉換成4byte或將其他數據類型轉換成byte的過程叫序列化

    ? ? ?數據---->n byte

    2)反序列化

    ? ? 將n個byte 轉換成一個數據的過程

    ? ? nbyte ---> 數據

    3)RandomAccessFile提供基本類型的讀寫方法,可以將基本類型數據

    ? ?序列化到文件或者將文件內容反序列化為數據

    ?IO流(輸入流、輸出流)

    ?字節流、字符流

    ?1.字節流

    ?1)InputStream、OutputStream

    ? ? InputStream抽象了應用程序讀取數據的方式

    ? ? OutputStream抽象了應用程序寫出數據的方式?

    ?2)EOF = End? ?讀到-1就讀到結尾

    ?3)輸入流基本方法

    ? ?int? b = in.read();讀取一個字節無符號填充到int低八位.-1是 EOF

    ? ?in.read(byte[] buf)?

    ? ?in.read(byte[] buf,int start,int size)

    4)輸出流基本方法

    ? out.write(int b)? 寫出一個byte到流,b的低8位

    ? out.write(byte[] buf)將buf字節數組都寫入到流

    ? out.write(byte[] buf,int start,int size)

    ??

    ?5)FileInputStream--->具體實現了在文件上讀取數據

    ?6)FileOutputStream 實現了向文件中寫出byte數據的方法

    ?7)DataOutputStream/DataInputStream

    ? ? 對"流"功能的擴展,可以更加方面的讀取int,long,字符等類型數據

    ? ?DataOutputStream

    ? ? ? ? writeInt()/writeDouble()/writeUTF()


    ?8)BufferedInputStream&BufferedOutputStream

    ?這兩個流類位IO提供了帶緩沖區的操作,一般打開文件進行寫入

    ?或讀取操作時,都會加上緩沖,這種流模式提高了IO的性能

    ?從應用程序中把輸入放入文件,相當于將一缸水倒入到另一個缸中:

    ?FileOutputStream--->write()方法相當于一滴一滴地把水“轉移”過去

    ?DataOutputStream-->writeXxx()方法會方便一些,相當于一瓢一瓢把水“轉移”過去

    ?BufferedOutputStream--->write方法更方便,相當于一飄一瓢先放入桶中,再從桶中倒入到另一個缸中,性能提高了

    ? ?

    ? ?

    ?2.字符流

    ?1) 編碼問題

    ?2)認識文本和文本文件

    ?java的文本(char)是16位無符號整數,是字符的unicode編碼(雙字節編碼)

    ?文件是byte byte byte ...的數據序列

    文本文件是文本(char)序列按照某種編碼方案(utf-8,utf-16be,gbk)序列化為byte的存儲結果

    3)字符流(Reader Writer)---->操作的是文本文本文件

    字符的處理,一次處理一個字符

    字符的底層任然是基本的字節序列

    字符流的基本實現

    ? ?InputStreamReader? ?完成byte流解析為char流,按照編碼解析

    ? ?OutputStreamWriter? 提供char流到byte流,按照編碼處理??

    ? ?

    ? ?FileReader/FileWriter

    ?字符流的過濾器

    ? ?BufferedReader? ?---->readLine 一次讀一行

    ? ?BufferedWriter/PrintWriter? ?---->寫一行? ??

    ? ?

    ? ?

    3.對象的序列化,反序列化

    1)對象序列化,就是將Object轉換成byte序列,反之叫對象的反序列化?

    2)序列化流(ObjectOutputStream),是過濾流----writeObject

    ? ?反序列化流(ObjectInputStream)---readObject


    3)序列化接口(Serializable)

    ? ?對象必須實現序列化接口 ,才能進行序列化,否則將出現異常

    ? ?這個接口,沒有任何方法,只是一個標準

    ?

    4) transient關鍵字

    ? ? private void writeObject(java.io.ObjectOutputStream s)

    ? ? ? ? throws java.io.IOException

    private void readObject(java.io.ObjectInputStream s)

    ? ? ? ? throws java.io.IOException, ClassNotFoundException

    ? ?分析ArrayList源碼中序列化和反序列化的問題

    5)序列化中 子類和父類構造函數的調用問題


    查看全部

  • 沒看懂的可以來看一下

    http://img1.sycdn.imooc.com//5e207537000188e319201080.jpg

    查看全部



  • http://img1.sycdn.imooc.com//5e2073980001de7519201080.jpg講了一大堆

    查看全部
    0 采集 收起 來源:遍歷目錄

    2020-01-16

  • java IO 1
    查看全部
    0 采集 收起 來源:文件的編碼

    2019-12-20

  • 啦啦啦
    查看全部
    0 采集 收起 來源:遍歷目錄

    2019-12-12

  • 遞歸遍歷目錄

    查看全部
    0 采集 收起 來源:遍歷目錄

    2019-11-02

  • 文件輸入流FileInputStream

    查看全部
  • 文件輸出流FileOutputStream

    查看全部
  • 本教程幾點要點:

    RandomAccessFile類的使用,可以使用其中的指針自定義讀取文件中的指定位置,實現分段讀取,分段存儲;

    java文件的保存方式是字節的形式保存的,byte,因此保存的文件有編碼的問題;

    工程中讀取或者保存在電腦中的文件會不會有亂碼,與文件保存時的編碼,以及工程編碼屬性這兩個因素有關,需要注意這點;

    類的序列化:可重寫writeObject、readObject兩個方法來自定義類的序列化方法,將某些trasient的屬性自定自定序列化。

    查看全部
    0 采集 收起 來源:文件的編碼

    2019-10-31

舉報

0/150
提交
取消
課程須知
親,為了更好的學習本門課程,需要您對二進制的知識有所了解,還要熟悉Java的基本語法和面向對象的知識。
老師告訴你能學到什么?
1、了解文件編碼。 2、能夠對文件和目錄進行管理操作。 3、能夠應用字節流和字符流對文件進行讀寫操作。 4、能夠對對象進行序列化和反序列化。

微信掃碼,參與3人拼團

微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號

友情提示:

您好,此課程屬于遷移課程,您已購買該課程,無需重復購買,感謝您對慕課網的支持!