IO流 1、IO流

1、IO流

1.1、IO概述

  • 列IO流用來處理設備之間的數據傳輸
  • 列Java對數據的操作是通過流的方式
  • 列Java用於操作流的對象都在IO包中
  • 列流按操作對象分爲兩種:字節流與字符流,字節流可以操作任何數據,字符流只能操作純字符數據比較方便。
  • 列流按流向分爲:輸入流,輸出流。

1.2、IO流結構圖

1.3、字節流


以上我常用的就是FileInputStream以及FileOutputStream。我比較喜歡直接上乾貨,所以直接用代碼通過幾個例子來講解字節流的實現過程。

package com.io;
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;
/**
 * 從程序把數據寫出到磁盤
 * @author Administrator
 *
 */
public class Demo1 {
    public static void main(String[] args) {
        try {
            //1.使用File類找到一個文件對象,得到IO操作的源或目標
            File file = new File("F:/test.txt");
            //2.通過字節流或字符流的子類創建對象,(得到IO操作的通道)
            //OutputStream os = new FileOutputStream(file);
            OutputStream os = new FileOutputStream(file, true);
            //3.進行讀或寫的操作,(IO操作)
            byte[] b = "hello word!".getBytes();
            os.write(b);
            //os.write("hello word!".getBytes());
            //4.關閉輸入/輸出,(打完收工,注意節約資源,關掉)
            os.close();
            System.out.println("操作完成!");
        } catch (Exception e) {
            e.printStackTrace();
            System.out.println("文件找不到!");
        }
    }
}
package com.io;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
/**
 * 從磁盤把數據文件讀出到程序
 * @author Administrator
 *
 */
public class Demo2 {
    public static void main(String[] args) {
        try {
            //1.使用File類找到一個文件對象,得到IO操作的源或目標
            File file = new File("F:\\test.txt");
            //2.通過字節流或字符流的子類創建對象,(得到IO操作的通道)
            InputStream is = new FileInputStream(file);
            //3.進行讀或寫的操作,(IO操作)
            byte[] b = new byte[512];
            while(is.read(b) != -1){
                String str = new String(b);
                System.out.println(str);
            }
            //4.關閉輸入/輸出,(打完收工,注意節約資源,關掉)
            is.close();
            System.out.println("操作完成!");
        } catch (Exception e) {
            e.printStackTrace();
            System.out.println("文件找不到!");
        }
    }
}

1.4字符流


我常用的是FileReader以及WriterReader。上乾貨

package com.io;
import java.io.File;
import java.io.FileWriter;
import java.io.Writer;
/**
 * 通過字符流把數據寫到磁盤文件
 * @author Administrator
 *
 */
public class Demo3 {
    public static void main(String[] args) {
        try {
            //1.使用File類找到一個文件對象,得到IO操作的源或目標
            File file = new File("F:/test.txt");
            //2.通過字節流或字符流的子類創建對象,(得到IO操作的通道)
            Writer writer = new FileWriter(file);
            //3.進行讀或寫的操作,(IO操作)
            writer.write("你好,張文!");
            //4.關閉輸入/輸出,(打完收工,注意節約資源,關掉)
            writer.close();
            System.out.println("操作完成!");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
package com.io;
import java.io.File;
import java.io.FileReader;
import java.io.Reader;
/**
 * 通過字符流把文件內容讀到程序中
 * @author Administrator
 *
 */
public class Demo4 {
    public static void main(String[] args) {
        try {
            //1.使用File類找到一個文件對象,得到IO操作的源或目標
            File file = new File("F:/test.txt");
            //2.通過字節流或字符流的子類創建對象,(得到IO操作的通道)
            Reader reader = new FileReader(file);
            //3.進行讀或寫的操作,(IO操作)
            char[] b = new char[512];
            int num = 0;
            while((num = reader.read(b)) != -1){
                String str = new String(b, 0, num);
                System.out.println(str);
            }
            //4.關閉輸入/輸出,(打完收工,注意節約資源,關掉)
            reader.close();
            System.out.println("操作完成!");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

接下來寫一個copy的程序,把某個文件複製到另外的地方:

package com.io;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;

/**
 * 複製文件到某個目錄
 * @author Administrator
 *
 */
public class Demo5 {
    public static void main(String[] args) {
        File f1 = new File("D:\\IMG_9214s.jpg");
        File f2 = new File("E:\\zhangwen.jpg");
        copy(f1, f2);
    }
    
    /**
     * 
     * @param f1源文件
     * @param f2複製文件
     */
    public static void copy(File f1, File f2){
        try {
            //1、分別創建輸入流和輸出流,通過字節流或字符流的子類創建對象,(得到IO操作的通道)
            InputStream is = new FileInputStream(f1);
            OutputStream os = new FileOutputStream(f2);
            //2、讀寫操作(邊讀邊寫)先讀再寫
            byte[] b = new byte[512];
            //先讀取
            int num = is.read(b);
            while(num != -1){
                //開始寫
                os.write(b);
                num = is.read(b);
            }
            //3.關閉輸入/輸出,(打完收工,注意節約資源,關掉)
            is.close();
            os.close();
            System.out.println("操作成功!");
        } catch (Exception e) {
            System.out.println("文件找不到!");
        }
    }
}

1.5緩衝流

IO的緩衝區的存在就是爲了提高效率,把要操作的數據放進緩衝區,然後一次性把緩衝區的內容寫到目的地,而不是寫一次就往目的地寫一次。

package com.io;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
/**
 * 字符輸入緩衝流
 * @author Administrator
 *
 */
public class Demo6 {
    public static void main(String[] args) throws IOException {
        //1、創建文件對象
        File file = new File("H:/軟考真題/20170323_IO流/20170323_IO流/筆記/IO和XML.txt");
        //2、創建流對象
        BufferedReader bf = new BufferedReader(new FileReader(file));
        //3、讀操作
        String str = null;
        while((str = bf.readLine()) != null){
            System.out.println(str);
        }
        //4、關閉流釋放資源
        bf.close();
    }
}
package com.io;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
/**
 * 字符輸出緩衝流
 * @author Administrator
 *
 */
public class Demo7 {
    public static void main(String[] args) throws IOException {
        //1、創建文件對象
        File file = new File("H:/test.txt");
        //2、創建流對象
        BufferedWriter bw = new BufferedWriter(new FileWriter(file));
        //3、輸出操作
        bw.write("你好JAVA!");
        //4、關閉流
        bw.close();
    }
}

1.6轉換流

打印流:該流提供了打印方法,可以將各種數據類型的數據都原樣打印。

package com.io;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.Writer;
/**
 * 轉換輸出流
 * @author Administrator
 *
 */
public class Demo8 {
    public static void main(String[] args) throws IOException {
        //1、創建文件對象
        File file = new File("H:/test.txt");
        //2、創建轉換流,字節流轉換爲字符流
        Writer writer = new OutputStreamWriter(new FileOutputStream(file));
        //3、輸出操作
        writer.write("轉換輸出流!");
        //4、關閉流
        writer.close();
    }
}

1.7打印流

打印流:該流提供了打印方法,可以將各種數據類型的數據都原樣打印。

package com.io;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.PrintWriter;
/**
 * 字符打印輸出流
 * @author Administrator
 *
 */
public class Demo9 {
    public static void main(String[] args) throws FileNotFoundException {
        //1、創建文件對象
        File file = new File("H:/test.txt");
        //2、創建打印流
        PrintWriter printWriter = new PrintWriter(file);
        //3、輸出操作
        printWriter.write("你好打印流!");
        //4、關閉流
        printWriter.close();
        printWriter.flush();
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章