java之IO操作詳解

# java之IO操作

一.文件的概念

文件是數據源(保存數據的地方)的一種,比如大家經常使用的word文檔,txt文件,excel文件…都是文件。文件最主要的作用就是保存數據,它既可以保存一張圖片,也可以保存視頻,聲音…

 

二.文件流

文件在程序中是以流的形式來操作的。

流:數據在數據源(文件)和程序(內存)之間經歷的路徑。

輸入流:數據從數據源(文件)到程序(內存)的路徑。

輸出流:數據從程序(內存)到數據源(文件)的路徑。

注:如何判斷是輸入流還是輸出流?

以內存爲參照,如果數據向內存流動則是輸入流,反之是輸出流。

 

三.java流分類

1.字節流:可以用於讀寫二進制文件以及任何類型文件。 byte

2.字符流:可以用於讀寫文本文件。不能操作二進制文件。

字節流 字符流
輸入 InputStream Reader
輸出 OutputStream Writer

 

四.常用io流 之文件對象

案例:文件數據源File類介紹

public static void fileDemo(){
    //創建一個文件對象
    File f = new File("src/test.txt");
    //得到文件的路徑
    System.out.println("文件路徑:"+f.getAbsolutePath());
    //得到文件的大小
    System.out.println("文件字節的大小:"+f.length() );
    //判斷文件是否可讀或可寫
    System.out.println("可讀:"+f.canRead());
    //創建文件和文件夾
    File f2 = new File("d:/demo.txt");
    if (!f2.exists()){
        //可以創建
        try {
            f2.createNewFile();
            System.out.println("創建成功");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }else {
        System.out.println("有文件,不能創建");
    }
}


結果:

文件路徑:D:\study\jiebademo2\src\test.txt
文件字節的大小:2102
可讀:true
創建成功

在D盤下創建了demo.txt文件。

 

若想創建創建文件夾,代碼如下:

public static void demo2(){
    File f = new File("d:/ff");
    //判斷文件夾是否存在
    if (f.isDirectory()){
        System.out.println("該文件夾已存在");
    }else {
        //創建文件夾
        f.mkdir();
    }
}

列出一個文件夾下的所有文件:

//列出文件夾下的所有文件
public static void demo3(){
    File f = new File("d:/study");
    if(f.isDirectory()){
        File[] files = f.listFiles(); //返回文件對象數組
        for(int i=0;i<files.length;i++){
            System.out.println("文件名 "+files[i].getName());
        }
    }
}

結果是:

文件名 apache-tomcat-9.0.14
文件名 campus_live_platform-master.zip
文件名 icutword
文件名 jar包
文件名 jiebademo
文件名 jiebademo2
文件名 jieba分詞
文件名 navicat for mysql10.0.11簡體中文破解版
文件名 springbootmybatisplus
文件名 springboot實戰資料
文件名 test.txt
文件名 筆記

 

五.常用io流 之文件字節流

案例1.讀取文件(文件字節輸入流使用。FileInputStream類),用FileInputStream的對象把文件讀入到內存。

public static void demo(){
    File f = new File("d:/demo.txt");
    FileInputStream fis = null;
    System.out.println("文件字節的大小:"+f.length() );
    //因爲File沒有讀寫的能力,所以需要使用InputStream
    try {
        fis = new FileInputStream(f);
        //定義一個字節數組,相當於緩存
        byte[] bytes = new byte[1024];
        int n = 0;//得到實際讀取到的字節數
        //循環讀取
        while ((n=fis.read(bytes))!=-1){
            //把字節轉成String
            String s = new String(bytes,0,n);
            System.out.println(s);
        }
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        //關閉文件流
        try {
            fis.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

 

案例2.在內存中寫入字符串,並保存到文件中(文件字節輸出流,FileOutputStream類)。

public static void demo(){
    //如果有這個文件,則在這個文件寫入,如果沒有則創建一個文件並寫入
    File f = new File("d:/demo.txt");
    //字節輸出流
    FileOutputStream fos = null;
    try {
        fos = new FileOutputStream(f);
        String s = "你好!";
        //定義字節數組
        byte[] bytes = new byte[1024];
        //如何把String轉化成一個bytes數組
        fos.write(s.getBytes());

    } catch (Exception e){
        e.printStackTrace();
    }finally {
        try {
            fos.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

 

六.常用io流 之文件字符流

案例.(文件字符輸入輸出流 FileReader FileWriter類)讀取一個文件,並寫入到另一個文件中。

注意:FiileReader和FilerWriter是針對字符操作!而不是字節!

public static void demo(){
    //文件讀取字符流對象(輸入流)
    FileReader fr = null;
    //寫入到文件(輸出流)
    FileWriter fw = null;
    try{
        //創建fr對象
        fr = new FileReader("D://demo.txt");
        //創建輸出對象
        fw = new FileWriter("D:/test2.txt");
        int n = 0;//記錄實際讀取到的字符數
        //讀取到內存
        char[] c = new char[1024];
        while((n=fr.read(c)) != -1){
            fw.write(c);
        }


    }catch(Exception e){
        e.printStackTrace();
    } finally {
        try {
            fr.close();
            fw.close();
        }catch (Exception e){
            e.printStackTrace();
        }
    }

}

 

七.緩衝字符流

爲了提高效率引入了緩衝字符流 BufferReader 和BufferWriter。直接操作String。

public static void demo2(){
    BufferedReader br = null;
    BufferedWriter bw = null;
    FileWriter fw =null;
    FileReader fr = null;
    try{
        fr = new FileReader("D:/demo.txt");
        br = new BufferedReader(fr);
        fw = new FileWriter("D:/test3.txt");
        bw = new BufferedWriter(fw);
        String s="";
        while ((s = br.readLine()) != null){
            //輸出到磁盤
           fw.write(s+"\r\n");
        }
    } catch (Exception e){
        e.printStackTrace();
    } finally {
        try {
            fr.close();
            fw.close();
            br.close();
            bw.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

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