首頁  >  文章  >  Java  >  Java中的File類別與IO流介紹與實例分析

Java中的File類別與IO流介紹與實例分析

王林
王林轉載
2023-04-20 20:28:09958瀏覽

    IO流:

    #IO流概述:

    ##IO :輸入/輸出(Input/Output)

    串流:是一種抽象概念,是對資料傳輸的總稱。也就是說資料在設備間的傳輸稱為流,流的本質是資料傳輸IO流就是用來處理設備間資料傳輸問題的, 常見的應用:文件複製;文件上傳;文件下載等等,總而言之,涉及到傳輸的,都涉及到流。

    IO流體系圖:

    Java中的File類別與IO流介紹與實例分析

    Java中的File類別與IO流介紹與實例分析

    #既然IO是涉及檔案的操作,那麼一定離不開檔案操作的技術:

    File類別:

    File 類別是java.io 套件中唯一代表磁碟檔案本身的物件。 File 類別定義了一些方法來操作文件,主要用來取得或處理與磁碟文件相關的信息,像是文件名稱、 文件路徑、存取權限和修改日期等,還可以瀏覽子目錄層次結構。

    File 類別表示處理檔案和檔案系統的相關資訊。 File 類別不具有從檔案讀取資訊和寫入資訊到檔案的功能,它僅描述檔案本身的屬性。所以和IO搭配在一起進行讀出與寫入的操作。

    先看一張File類別常用的方法總匯圖:

    Java中的File類別與IO流介紹與實例分析

    #使用createNewFile()建立一個檔案:

    public class test01 {
        public static void main(String[] args) throws IOException {
    		//先建立一个File对象,并传入路径
            File file1 = new File("G://abc.txt");
            //创建空文件,如果没有存在则新建一个,并且返回True,如果存在了就返回false
            System.out.println(file1.createNewFile());   
    }

    如果執行後,該目錄沒有這個文件,那麼會創建一個,並且返回true,如果已經存在了,就會返回false,代表創建失敗。

    Java中的File類別與IO流介紹與實例分析

    使用mkdir()建立目錄:

    File file2 = new File("G://a");
    	System.out.println(file2.mkdir());   
    //创建一个目录,如果没有存在则新建一个,并且返回True,如果存在了就返回false

    使用mkdirs()建立多層級目錄:

    File file3 = new File("G://a//b//c");
            System.out.println(file3.mkdirs());   
    //创建多级目录,如果没有存在则新建一个,并且返回True,如果存在了就返回false

    Java中的File類別與IO流介紹與實例分析

    接著我們需要使用IO流裡面的功能來輸入與輸出:

    # #先介紹四個常用的流:

    字節輸入流:

    InputStream

    字節輸出流:

    OutputStream

    Java中的File類別與IO流介紹與實例分析字元輸入流:

    Reader

    字元輸出流:

    Writer

    Java中的File類別與IO流介紹與實例分析為什麼會有位元組和字元兩種流呢?

    ASCII 碼中

    ,一個英文字母(不分大小寫)為一個字節,一個中文漢字為兩個位元組。

    UTF-8 編碼中

    ,一個英文字為一個位元組,一個中文為三個位元組。

    Java中的File類別與IO流介紹與實例分析

    Unicode 編碼中

    ,一個英文為一個位元組,一個中文為兩個位元組。 所以我們知道電腦讀取資料是一個一個的讀取,當檔案裡面是數字或英文的時候,因為都佔了一個字節,所以可以正常讀取出來。

    那如果是漢字呢?最少也佔了兩個字節,如果把一個漢字拆分讀取,顯示出來一定是有問題的。 Java中的File類別與IO流介紹與實例分析

    小結:如果資料透過Window自帶的記事本軟體打開,我們還可以讀懂裡面的內容,就使用字元流,否則使用位元組流。如果你不知道該使用哪種類型的串流,就使用位元組流!

    ###以下是四個流對應功能的方法名稱總彙表:##################位元組輸出流:##### ####我們使用位元組輸出流給abc.txt檔案裡面寫一句話:######
    public class test01 {
        public static void main(String[] args) {
    
            try{
                  //创建输出流对象:
                OutputStream fos = null;
                fos = new FileOutputStream("G://abc.txt");
                String str = "今天的博客是IO流";
                //先将需要写入的字符打散成数组:
                byte[] words = str.getBytes();
                //使用写入的功能
                fos.write(words);
    
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    ######運行後:############# ####位元組輸入流(從檔案讀取到控制台):######我們知道如果檔案內是漢字,使用位元組輸入流,那麼顯示的肯定是亂碼,如果現在檔案裡面是「我愛中國」這四個字,使用下面這段程式碼:###
    public class test02 {
        public static void main(String[] args) {
            //创建字节输入流对象:
            InputStream fis = null;
            try{
                fis = new FileInputStream("G://abc.txt");
                int data;
                //fis.read()取到每一个字节通过Ascll码表转换成0-255之间的整数,没有值返回-1
                while((data=fis.read())!=-1){
                    //(char) data 将读到的字节转成对应的字符
                    //中文的字符是2+个字节组成
                    System.out.print((char) data);
                }
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }finally {
                try{
                    fis.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
    ######輸出的結果是:################## ##接著把檔案內資訊換成英文和數字:######################結論:有漢字的檔案讀取不能用位元組流### ###

    字符输出流:

    我们使用字符输出流给abc.txt文件里面写几句话:

    public class test03 {
        public static void main(String[] args) {
            try{
                //使用字符输出流的FileWriter写入数据
                Writer fw = new FileWriter("G://abc.txt");
                fw.write("我们在学Java");
                fw.write("一起加油");
                fw.close(); //关闭资源
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    Java中的File類別與IO流介紹與實例分析

    也没用问题,我们发现,使用字符流写中文汉字更方便。

    字符输入流:

    可以设置缓存流提高获取值的效率:

    public class test04 {
        public static void main(String[] args) throws IOException {
            //创建字符输入流对象:
            Reader fr = null;
            try{
                fr = new FileReader("G:/abc.txt");
                //借助字符流对象创建了字符缓存区 把字符一个一个的取到后先放到缓存区
                //然后一起再读写到程序内存来,效率更高
                BufferedReader br = new BufferedReader(fr);
                //先去缓存区一行一行的读取
                String line = br.readLine();
                while(line != null){
                    System.out.println(line);
                    line = br.readLine();
                }
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }finally {
                try {
                    fr.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }

    当文件内的信息为多行的时候:

    Java中的File類別與IO流介紹與實例分析

    字节流和字符流总结:

    • IO是文件的输入和输出,我们要想去对文件或者写,或者通过程序发送消息给另外的用户都要用到流。

    • IO流分 字节流和字符流,字节流是以字节为单位IO,字符流是以字符为单位IO;通常读写图片、视频音频等用字节 流,如果读写文件的内容比如中文建议用字符流。

    以上是Java中的File類別與IO流介紹與實例分析的詳細內容。更多資訊請關注PHP中文網其他相關文章!

    陳述:
    本文轉載於:yisu.com。如有侵權,請聯絡admin@php.cn刪除