6 IO流

1.IO: I : input 輸入 O:output 輸出

輸入輸出都是以內存爲基準。 將數據文件讀入到內存中成爲輸入 。 將數據從內存中存儲到磁盤或發送到網線上傳輸成爲輸出。

輸入流,形象上相當得到一根有水的水管。其中水管中每個水滴對應於該IO流裏的數據單元。 如果是字符流,每個水滴就是字符;如果是字節流,每個水滴就是字節。

程序可以做:
        1. 每次去“取”一個水滴,執行該方法時程序就會返回得到的水滴。
        2. 實際編程中,往往會先創建一個字節數組或字符數組,該數組作爲取水的竹筒。
輸出流,形象上相當於得到了一根沒有水的空水管。 程序可以做: 1. 每次可以向水管輸出一滴水。程序每次把一個竹筒的指定範圍的水滴(offset, length)輸出到水管中。

2.java是通過一個File類來操作文件的。

創建文件對象:就代表一個真實的文件 
               File file = new File("文件路徑/文件夾路徑"); 

//獲取指定目錄下所有的文件信息 
             File[] files = file.listFiles(); 
//判斷是否是文件 
f.isFile() 
//文件或者文件夾名稱 f.getName() 
//獲取文件的絕對路徑 f.getPath() 
//判斷是否是目錄 f.isDirectory() 
//判斷文件是否存在 f.exists() 
//創建文件或者文件夾 f.mkdirs() 
//刪除文件 f.delete()

遞歸列出所有的文件 
public static void main(String[] args) { 

//通過將給定路徑名字符串轉換爲抽象路徑名來創建一個新 File 實例    File:可以用於表示文件|目錄
    File file = new File("D:/fkjava/Java基礎班/day14");

    //根據文件指定的文件獲取文件下所有的子文件以及目錄

    File_BianLi.searchFile(file);

}

public static void searchFile(File file) {

        //獲取指定目錄下所有的文件信息
        File[] files = file.listFiles();    
        System.out.println("files:"+files);

        for(File f : files){

            if(f.isFile()){
                //此處的f表示文件
                System.out.println("文件名:"+f.getName());
            }else{
                //此處的f表示目錄
                System.out.println(f.getName()+":是一個目錄");
                //繼續獲取目錄下的所有的子文件以及目錄
                searchFile(f);  
            }

}

3. API

6   IO流
緩衝字符輸入流多了一個按行讀取文本文件內容 readLine(); 文本文件的操作建議使用緩衝字符流。

4.序列化和反序列化

序列化(Serialize) 序列化對象:序列化對象是將對象數據保存到序列化文件中。
      ①被序列化的對象一定要實現序列化接口Serializable。

     ②開始對象序列化 :使用ObjectOutputStream(對象字節輸出流),將對象序列化成文件。
    反序列化對象:將序列化文件解析成對象。
                ①反序列化對象,對象依然需要實現序列化接口Serializable。
                ②使用ObjectInputStream將序列化文件輸入到內存中來解析。

5.文件複製

FileInputStream創建的3種方式: 
FileInputStream inuput=new FileInputStream(""); 

FileInputStream inuput=new FileInputStream(new File("")); 

FileInputStream inuput=new FileInputStream(input); 

//定義水桶
byte[] shuiTong = new byte[1024*1024];

int len = 0;

        while((len = input.read(shuiTong))!=-1){

            //通過輸出流,將數據從內存中寫入磁盤
            out.write(shuiTong,0,len);

        }

6.序列化

public static void main(String[] args) { 

try(
//通過字節輸出流  指定輸出文件的位置   需要將對象序列化至哪一個文件

        OutputStream out = new FileOutputStream("src/org/fkjava/java_io/序列化/user");

        ObjectOutputStream objectOutputStream = new ObjectOutputStream(out);) {

        User user = new User(“jack”,35,new Address("0001","加拿大"));
        User user2 = new User("long",35,new Address("0002","廣州"));

        List<User> list = new ArrayList();
        list.add(user);
        list.add(user2);

        //通過對象流 將對象寫入至磁盤文件     該過程叫做 對象序列化
        objectOutputStream.writeObject(list);

        objectOutputStream.flush();
} catch (Exception e) {

    e.printStackTrace();
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章