成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

java 中 IO 操作總結(jié)

jsummer / 2610人閱讀

摘要:代碼操作分析經(jīng)常會(huì)遇到各種流操作,流操作一般分為兩類字符流和字節(jié)流。我是拉丁小毛,歡迎大家關(guān)注我哦,一起交流,共同進(jìn)步。有問(wèn)題可以郵我哦

代碼
java IO 操作分析
package jdk.util.sourceCode;


import java.io.*;

/**
 * 經(jīng)常會(huì)遇到各種 IO 流操作,IO 流操作一般分為兩類:字符流和字節(jié)流。
 * 以 "Reader" 結(jié)尾都是字符流,操作的都是字符型的數(shù)據(jù)
 * 以 "Stream" 結(jié)尾的都是字節(jié)流,操作的都是 byte 類型的數(shù)據(jù)
 * 二者的區(qū)別:
 *  字節(jié)流沒(méi)有緩沖區(qū),是直接輸出的;而字符流是先輸出到緩沖區(qū),然后在調(diào)用 close() 方法后再輸出信息
 *  處理對(duì)象不同,字節(jié)流能處理所有類型的數(shù)據(jù),但是字符流只能處理字符類型的數(shù)據(jù)(只要是處理純文本數(shù)據(jù),就優(yōu)先考慮使用字符流,除此之外都使用字節(jié)流)
 * java byte -> short -> int -> long    1byte -> 2byte -> 4byte -> 8byte
 *
 *
 *
 * InputStream 和 OutputStream 是各種輸入輸出字節(jié)流的基類,所有字節(jié)流都繼承于這兩個(gè)基類
 *
 *
 * FileInputStream 和 FileOutputStream 這兩個(gè)從字面意思很容易理解,是對(duì)文件的字節(jié)流操作,也是最常見(jiàn)的 IO 操作流
 *
 *
 * 非流式文件類 -- File 類
 *  從定義來(lái)看,F(xiàn)ile 類是 Object 的直接子類,同時(shí)它繼承了 Comparable 接口可以進(jìn)行數(shù)組的排序
 *  File 類的操作包括文件的創(chuàng)建,刪除,重命名,得到文件/文件夾的路徑,創(chuàng)建時(shí)間等
 *  File 類是對(duì)文件系統(tǒng)中文件以及文件夾進(jìn)行封裝的一個(gè)對(duì)象,可以通過(guò)對(duì)象的思想來(lái)操作文件和文件夾
 *
 /



/**
 * @author: [email protected]
 * @date: 2019/5/25 15:40
 * @description:
 * @version: 1.0
 * @className: TestIO
 */
public class TestIO {


    public static void  main(String[] args){
        // 1.調(diào)用 新建文件
//        createFile("F:[email protected]", "測(cè)試io.txt");

        // 2.調(diào)用刪除文件
//        deleteFile("F:[email protected]","測(cè)試io.txt");


        // 3.調(diào)用創(chuàng)建文件夾
//        createFolder("F:[email protected]", "測(cè)試io文件夾");


        // 4.列出指定目錄下面的所有文件,包括隱藏文件
//        listFiles("F:[email protected]");


        // 5.判斷指定的 文件夾是否是一個(gè) 目錄(即是否是一個(gè) 文件夾)
//        isFolder("F:[email protected]", "測(cè)試io文件夾");


        // 6. 向指定的文件中(需要在文件名中給出路徑和文件名,我這里是為了簡(jiǎn)便這樣寫了)通過(guò) 字節(jié)流 寫入數(shù)據(jù) (這里前提:認(rèn)為該文件已經(jīng)存在,不需要再創(chuàng)建)
//        writeFileByByte("F:[email protected]測(cè)試io.txt");


        // 7.從指定的文件中讀取內(nèi)容
//        readFileByByte("F:[email protected]測(cè)試io.txt");


        // 8. 從 指定文件讀取內(nèi)容并寫入到 目標(biāo)文件
        readWriteFile("F:gamexx.mp4",
                "E:github-projectjdksrcmainjavajdkutilsourceCode測(cè)試io.txt");


    }


    /**
     * 因?yàn)?io 流基本是與 File(文件/文件夾) 操作密不可分的,因此 io 的操作,只要涉及到文件,文件夾的都必須使用 File 類
     * 在指定的路徑下,新建一個(gè) 指定文件名的 文件
     * @param path 文件路徑
     * @param fileName 文件名
     */
    public static void createFile(String path, String fileName){
        // 因?yàn)槭窃?操作 文件,所以用到 File 對(duì)象【記?。核信c文件/文件夾操作相關(guān)的內(nèi)容,都必須第一時(shí)間想到要用 File 對(duì)象】
        File file = new File(path+fileName); // 實(shí)例化一個(gè) file 操作對(duì)象
        try {
            file.createNewFile(); // 調(diào)用 file 文件/文件夾 實(shí)例對(duì)象的 方法,來(lái)新建文件
            System.out.println("目標(biāo)文件已存在: " + path + fileName);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }


    /**
     * 刪除一個(gè)指定路徑下的 文件
     * @param path 該文件的路徑
     * @param fileName 該文件的文件名
     */
    public static void deleteFile(String path, String fileName){
        File file = new File(path+fileName);
        if(file.exists()){
            file.delete();
            System.out.println("目標(biāo)文件已刪除");
        }else{
            System.out.println("要?jiǎng)h除的目標(biāo)文件不存在");
        }
    }


    /**
     * 新建一個(gè) 文件夾
     * @param path 路徑
     * @param folderName 文件夾名
     */
    public static void createFolder(String path, String folderName){
        File file = new File(path+folderName);
        file.mkdir();
        System.out.println("該文件夾已經(jīng)存在于: " + path + folderName);
    }


    /**
     * 列出指定目錄下面的所有文件
     * @param path 目錄的路徑名
     */
    public static void listFiles(String path){
        File file = new File(path);
        if (file.isDirectory()){
            File[] fileArray = file.listFiles();
            for (int i = 0; i < fileArray.length; i++){
                System.out.println( "該目錄下的文件: " + fileArray[i]);
                System.out.println( "該目錄下的文件或文件夾的名字: " + fileArray[i].getName());
            }
        }else{
            System.out.println(path + " 目錄不存在");
        }
    }


    /**
     * 判斷給定的 文件夾 是否是一個(gè)目錄
     * @param path
     */
    public static void isFolder(String path, String folderName){
        File file = new File(path + folderName);
        if (file.isDirectory()){
            System.out.println(path + folderName + " 是一個(gè)目錄");
        }else{
            System.out.println(path + folderName + " 不是一個(gè)目錄");
        }
    }


    /**
     * 通過(guò) 字節(jié)流 向 指定文件 寫入內(nèi)容
     * @param fileName 文件名,這里為了簡(jiǎn)化,文件名中帶上 路徑
     */
    public static void writeFileByByte(String fileName){
        File file = new File(fileName);
        OutputStream outputStream = null; // 從內(nèi)存中 寫入內(nèi)容 到 文件中,這是輸出流,因此要用 輸出流
        // FileOutputStream 的構(gòu)造器大體上有兩類:一類是 傳入一個(gè)帶有文件名和文件路徑的字符串;另一類是 傳入一個(gè) File 文件/文件夾對(duì)象
        try {
            outputStream = new FileOutputStream(file, true); // 給 file 文件對(duì)象 構(gòu)造一個(gè)字節(jié)輸出流
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        // 這里穿插一個(gè)小知識(shí)點(diǎn),即我們 給一個(gè) int 參數(shù),但是我們要讓 outputStream 以 byte[] 的形式寫入,接下來(lái)就看 int 轉(zhuǎn) byte[] 吧
        int a = 12345678; // 為什么這樣呢?因?yàn)?一個(gè) int 是 4個(gè)byte,所以一個(gè) int 轉(zhuǎn)成 byte[] 后,一定是里面包含4個(gè)byte元素的 byte[] 數(shù)組
        byte[] b = new byte[]{
                (byte) ((a >> 24) & 0xFF),
                (byte) ((a >> 16) & 0xFF),
                (byte) ((a >> 8) & 0xFF),
                (byte) ((a ) & 0xFF)
        };
        try {
            outputStream.write(b); // 這里還有一個(gè)問(wèn)題沒(méi)解決:寫入的時(shí)候,選擇編碼格式(稍后解決)
            outputStream.close();
        }catch (IOException e) {
                e.printStackTrace();
            }
    }


    /**
     * 通過(guò) 字節(jié)流 從 指定文件 讀取輸出內(nèi)容
     * @param fileName 文件名,這里為了簡(jiǎn)化,文件名中帶上 路徑
     */
    public static void readFileByByte(String fileName){
        File file = new File(fileName);
        InputStream inputStream = null; // 從 硬盤中 讀取內(nèi)容 到 內(nèi)存中,這是 輸入流,因此聲明 輸入流 對(duì)象
        try {
            inputStream = new FileInputStream(file);
            // inputStream 讀取內(nèi)容有5個(gè)方法 read():默認(rèn)讀取一個(gè)byte,readBytes(byte b[], int off, int len)
            // 這里我們采用 read(byte b[], int off, int len) 方法
            byte[] byter = new byte[1024]; // 所以先實(shí)例化一個(gè) byte[]
            int len = inputStream.read(byter);
            inputStream.close();
            // 最后我們輸出一下讀取到的內(nèi)容
            System.out.println(new String(byter, 0, len));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }


    /**
     * @author: [email protected]
     * @param: [sourceFile, desFile]
     * @return: void
     * @date: 2019/5/25 18:04
     * @version: 1.0
     * @description: 最后來(lái)一個(gè) 從 指定文件中 讀取內(nèi)容 到 指定目標(biāo)文件中
     */
    public static void readWriteFile(String sourceFile, String desFile){
        File inputFile = new File(sourceFile);
        File outputFile = new File(desFile);
        InputStream inputStream = null;
        OutputStream outputStream = null;
        try {
            inputStream = new FileInputStream(inputFile);
            byte[] byter = new byte[1024];
            inputStream.read(byter);
            outputStream = new FileOutputStream(outputFile, true);
            outputStream.write(byter);
            outputStream.close();
            inputStream.close();
            System.out.println("操作完成");
        }catch (Exception e){
            System.out.println(e.getMessage());
        }
    }

}
聲明
原創(chuàng)手敲不易,轉(zhuǎn)載請(qǐng)注明出處,謝謝。我是拉丁小毛,歡迎大家關(guān)注我哦,一起交流,共同進(jìn)步。有問(wèn)題可以郵我哦([email protected])

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/74652.html

相關(guān)文章

  • Java知識(shí)點(diǎn)總結(jié)(JDBC-大文本對(duì)象的使用)

    摘要:知識(shí)點(diǎn)總結(jié)大文本對(duì)象的使用知識(shí)點(diǎn)總結(jié)用于存儲(chǔ)大量的文本數(shù)據(jù)大字段有些特殊,不同數(shù)據(jù)庫(kù)處理的方式不一樣,大字段的操作常常是以流的方式來(lái)處理。最大長(zhǎng)度為字符的列。 Java知識(shí)點(diǎn)總結(jié)(JDBC-大文本對(duì)象的使用) @(Java知識(shí)點(diǎn)總結(jié))[Java, JDBC] CLOB(Chaaracter Large Object) 用于存儲(chǔ)大量的文本數(shù)據(jù) 大字段有些特殊,不同數(shù)據(jù)庫(kù)處理的方式不一樣...

    aboutU 評(píng)論0 收藏0
  • Java IO學(xué)習(xí)筆記總結(jié)

    摘要:學(xué)習(xí)筆記總結(jié)前言前面的八篇文章詳細(xì)的講述了的操作方法,文章列表如下基本的文件操作字符流和字節(jié)流的操作和操作內(nèi)存操作流管道流打印流對(duì)的支持和后續(xù)字節(jié)流字節(jié)流的操作都是基于和這兩個(gè)抽象類是字節(jié)輸入流,主要的功能是從文件中讀取數(shù)據(jù)它的子類有內(nèi)存操 Java IO學(xué)習(xí)筆記總結(jié) 前言 前面的八篇文章詳細(xì)的講述了Java IO的操作方法,文章列表如下 基本的文件操作 字符流和字節(jié)流的操作 In...

    zhangke3016 評(píng)論0 收藏0
  • Java知識(shí)點(diǎn)總結(jié)JavaIO-字符流)

    摘要:使用字節(jié)流寫入文件,如果沒(méi)有關(guān)閉字節(jié)流操作,文件依然存在內(nèi)容,說(shuō)明字節(jié)流是操作文件本身的。字節(jié)流比字符流更好,使用更廣泛。 Java知識(shí)點(diǎn)總結(jié)(JavaIO-字符流) @(Java知識(shí)點(diǎn)總結(jié))[Java, JavaIO] [toc] 在程序中一個(gè)字符等于兩個(gè)字節(jié),那么 Java 提供了 Reader 和 Writer 兩個(gè)專門操作字符流的類。 字符輸出流:Writer 類定義如下: p...

    thekingisalwaysluc 評(píng)論0 收藏0
  • 少啰嗦!一分鐘帶你讀懂Java的NIO和經(jīng)典IO的區(qū)別

    摘要:的選擇器允許單個(gè)線程監(jiān)視多個(gè)輸入通道。一旦執(zhí)行的線程已經(jīng)超過(guò)讀取代碼中的某個(gè)數(shù)據(jù)片段,該線程就不會(huì)在數(shù)據(jù)中向后移動(dòng)通常不會(huì)。 1、引言 很多初涉網(wǎng)絡(luò)編程的程序員,在研究Java NIO(即異步IO)和經(jīng)典IO(也就是常說(shuō)的阻塞式IO)的API時(shí),很快就會(huì)發(fā)現(xiàn)一個(gè)問(wèn)題:我什么時(shí)候應(yīng)該使用經(jīng)典IO,什么時(shí)候應(yīng)該使用NIO? 在本文中,將嘗試用簡(jiǎn)明扼要的文字,闡明Java NIO和經(jīng)典IO之...

    Meils 評(píng)論0 收藏0
  • 我的阿里之路+Java面經(jīng)考點(diǎn)

    摘要:我的是忙碌的一年,從年初備戰(zhàn)實(shí)習(xí)春招,年三十都在死磕源碼,三月份經(jīng)歷了阿里五次面試,四月順利收到實(shí)習(xí)。因?yàn)槲倚睦砗芮宄业哪繕?biāo)是阿里。所以在收到阿里之后的那晚,我重新規(guī)劃了接下來(lái)的學(xué)習(xí)計(jì)劃,將我的短期目標(biāo)更新成拿下阿里轉(zhuǎn)正。 我的2017是忙碌的一年,從年初備戰(zhàn)實(shí)習(xí)春招,年三十都在死磕JDK源碼,三月份經(jīng)歷了阿里五次面試,四月順利收到實(shí)習(xí)offer。然后五月懷著忐忑的心情開(kāi)始了螞蟻金...

    姘擱『 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<