中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

java中IO的概念及使用

發布時間:2021-08-02 09:27:45 來源:億速云 閱讀:130 作者:chen 欄目:開發技術

本篇內容主要講解“java中IO的概念及使用”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“java中IO的概念及使用”吧!

目錄
  • 一.認識IO

    • 1.IO的分類

    • 2.IO的方式

    • 3.IO讀寫的方式

    • 4.IO的特性

  • 二.文件操作

    • 1.文件的構成

    • 2.文件的創建

    • 3.文件操作的API使用

  • 三.IO流

    • 1.流的分類

    • 2.流的創建

    • 3.流的使用

      • <1>輸入流

      • <2>輸出流

      • <3>實例:文件的復制

  • 總結

    一.認識IO

    1.IO的分類

    (1)BIO:同步阻塞IO

    (2)NIO:同步非阻塞IO

    (3)AIO:異步阻塞IO

    注意: 這里主要介紹BIO

    2.IO的方式

    IO本質就是對數據的操作

    (1)網絡IO

    (2)本地IO

    3.IO讀寫的方式

    java中IO的概念及使用

    4.IO的特性

    (1)本質上屬于數據傳輸

    (2)涉及兩個設備間的傳輸方向(一般,自己寫java程序的時候,只關注自己程序的一方)

    (3)數據流

    java中IO的概念及使用

    (4)java進程的IO操作,對進程的影響:

    • 1.阻塞IO 會導致進程在運行態和阻塞態之間轉變,由操作系統完成后序的IO操作

    • 2.java進程,在內核態和用戶態之間切換:性能會收到影響(下降)

    (5)IO緩沖流

    java中IO的概念及使用

    不使用緩沖流:java程序每次都從主機內存讀寫數據,每次都直接讀取數據/發送數據。write()/read()

    使用/不使用緩沖區的區別:

    例如:循環10000次,每次write1個字節數據到本地文件

    不使用緩沖區:每次循環都是IO操作,都涉及進程狀態由運行態變為阻塞態,由用戶態變為內核態(10000次影響)

    使用緩沖區:每次write復制數據到緩沖區,flush才算IO操作(一定要記得)(一次影響)性能更好

    二.文件操作

    1.文件的構成

    (1)文件的頭信息(Metadata)

    (2)文件的內容

    注意: java.io.File 不是對文件的內容操作,知識對文件本身或者頭信息操作

    2.文件的創建

    java中IO的概念及使用

    new操作時的注意事項:

    • 1.既可以指定文件,也可以指定文件夾

    • 2.通過路徑創建File:可以使用絕對路徑/相對路徑

    • 3.不管路徑上是否存在這個文件/文件夾,java都可以創建得到一個File對象(但是對這個File操作時,可能會拋出異常)

    3.文件操作的API使用

    java中IO的概念及使用

    文件操作示例:遍歷某個目錄下,所有的子文件/子文件夾

      public static void main(String[] args) {
            File file=new File("C:\\Users\\26905\\Desktop\\javaCode");
            List<File> list=listDir(file);
    //        for (int i = 0; i <list.size() ; i++) {
    //            System.out.println(list.get(i));
    //        }
            //jdk1.8集合框架使用Stream操作,可以使用lambda表達式打印
            list.stream().forEach(System.out::println);
        }

    方法一: 效率不高

    public static List<File> listDir(File dir){
            List<File> list=new ArrayList<>();
            if(dir.isFile()){
                list.add(dir);//效率不太好的地方,如果是文件,返回的list只存放一個元素
            }else {
                File[] children=dir.listFiles();
                for(File file:children){
                    List<File> files=listDir(file);
                    list.addAll(files);
                }
            }
            return list;
        }

    方法二: 效率較高

     public static List<File>  listDir2(File dir){
            List<File> list=new ArrayList<>();
            if(dir.isDirectory()){
                //獲取目錄下一級的子文件和子文件夾
                File[] children=dir.listFiles();
                if(children!=null){
                    for(File file:children){
                        if(file.isDirectory()){
                            //如果子文件還是文件夾,遞歸調用
                            list.addAll(listDir2(file));
                        }else{
                            list.add(file);
                        }
                    }
                }
            }
            return list;
        }

    三.IO流

    1.流的分類

    java中IO的概念及使用

    java中IO的概念及使用

    java中IO的概念及使用

    2.流的創建

    java中IO的概念及使用

    3.流的使用

    java中IO的概念及使用

    <1>輸入流
    import java.io.*;
    public class  FileInput {
        /**
         * 字節文件:C:\Users\26905\Desktop\畫圖筆記\JavaWeb\JSON和ajax簡單介紹.png
         * 字符文件:C:\Users\26905\Desktop\論文,ppt,作業,筆記,圖片等\java筆記.txt
         * @param args
         */
        public static void main(String[] args) throws IOException {
            //圖片文件,以二進制的方式操作
            File file1=new File("C:\\Users\\26905\\Desktop\\畫圖筆記\\JavaWeb\\JSON和ajax簡單介紹");
            File file =new File("C:\\Users\\26905\\Desktop\\論文,ppt,作業,筆記,圖片等\\比特草稿本.txt");
    
            //1.文件輸入字節流
            FileInputStream fis=new FileInputStream(file);
            //不知道文件有多 大,先定義一個一定大小的字節數組,然后不停讀入,每次刷新以下就好
            byte[] bytes=new byte[1024*8];
            //輸入流讀取的固定寫法:讀取到一個字節/字符數組,定義read的返回值變量,while
            int len=0;
            //len表示讀入字節的長度
            //如果不等于-1,說明讀取未結束
            while ((len=fis.read(bytes)) !=-1){
                //讀取到的長度,數組可能讀滿,也可能沒有讀滿
                //當次讀取,一般使用數組[0,len]表示讀取內容
                //字節數組轉字符串
                String str=new String(bytes,0,len);
               // System.out.println(str);
            }
            //一般來說,輸入輸出流使用完,一定要關閉,關閉的關系是反向關系
            //例如:創建的時候是從里往外創建,則關閉的時候就是從外往內關閉
            fis.close();
    
            //2.文件的字符輸入流
            FileReader fr=new FileReader(file);
            char []chars=new char[1024];
            int lenFr=0;
            while ((lenFr=fr.read(chars))!=-1){
                 String strFr=new String(chars,0,lenFr);
                //System.out.println(strFr);
            }
            fr.close();
    
            //3.緩沖流:緩沖字節輸入,緩沖字符輸入
            FileInputStream FIS=new FileInputStream(file);//文件字節輸入流
            //字節流轉字符流一定要經過字節字符轉換流來轉換,并且還可以指定編碼
            InputStreamReader isr=new InputStreamReader(FIS);
            //緩沖流
            BufferedReader br=new BufferedReader(isr);
            String str;
            //讀取,當字符串為空時,結束
            while ((str=br.readLine()) !=null){
                System.out.println(str);
            }
            br.close();
            isr.close();
            FIS.close();
        }
    }
    <2>輸出流
    import java.io.File;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.PrintWriter;
    public class FileOutput {
        public static void main(String[] args) throws IOException {
            /**
             * D:\java代碼\1.txt
             */
            //路徑上沒有該文件,new File不會報錯,但是在操作輸出流會拋出FileNotFoundException
            File file2=new File("D:\\java代碼\\1.txt");
            //把a-z換行輸出到某個文件,需要考慮文件是否存在的問題
            if(!file2.exists()){
                file2.createNewFile();
            }
            //new FileWriter()  文件的不帶緩沖的字符輸出
            //new FileWriter()  文件的不帶緩沖的字節輸出
            //new BufferedWriter() 帶緩沖的字符輸出
            //new PrintWriter()    打印輸出流
    
            //緩沖的字符輸出
    //        BufferedWriter bw=new BufferedWriter(new FileWriter(file2));
    //        bw.write("\n");
    
            //打印輸出流
            //PrintWriter pw=new PrintWriter(new FileWriter(file));
            PrintWriter pw =new PrintWriter(new FileOutputStream(file2));
            //快速打印a-z
            for (int i = 'a'; i <='z' ; i++) {
                pw.println((char)i);
            }
            pw.flush();
        }
    }
    <3>實例:文件的復制
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;
    public class FileCopy {
        public static void main(String[] args) throws IOException {
            //文件復制
            File input=new File("D:\\java代碼\\1.txt");
            File output=new File("D:\\java代碼\\2.txt");
            if(!output.exists()){
                output.createNewFile();
            }
            //定義輸入輸出流
            //輸入流
            FileInputStream fis=new FileInputStream(input);
            // 輸出流
            FileOutputStream fos=new FileOutputStream(output);
            byte[]bytes=new byte[1024*8];
            int len;
            while ((len=fis.read(bytes))!=-1){//每次從輸入流讀取到byte[]的內容,直接輸出到某個文件,就是復制
                //bytes可能沒存滿,需要指定長度
                fos.write(bytes,0,len);
            }
            fis.close();
            fos.close();
        }
    }

    到此,相信大家對“java中IO的概念及使用”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI

    饶河县| 百色市| 安溪县| 双桥区| 衡阳市| 上饶市| 方山县| 正宁县| 临清市| 罗城| 鄱阳县| 龙胜| 皮山县| 资溪县| 凌云县| 江达县| 武强县| 虞城县| 安岳县| 革吉县| 通道| 怀来县| 龙泉市| 东明县| 孟津县| 青岛市| 郎溪县| 乌拉特中旗| 临漳县| 印江| 香格里拉县| 镇巴县| 资兴市| 扎鲁特旗| 家居| 怀安县| 津市市| 任丘市| 泰宁县| 南川市| 抚松县|