最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java IO流之原理分類與節(jié)點(diǎn)流文件操作詳解

 更新時(shí)間:2021年10月06日 13:28:28   作者:葉綠體不忘呼吸  
流(Stream)是指一連串的數(shù)據(jù)(字符或字節(jié)),是以先進(jìn)先出的方式發(fā)送信息的通道,數(shù)據(jù)源發(fā)送的數(shù)據(jù)經(jīng)過這個(gè)通道到達(dá)目的地,按流向區(qū)分為輸入流和輸出流

IO流簡介

I/O是Input/Output的縮寫, I/O技術(shù)是非常實(shí)用的技術(shù),用于處理設(shè)備之間的數(shù)據(jù)傳輸。如讀/寫文件,網(wǎng)絡(luò)通訊等。

Java程序中,對于數(shù)據(jù)的輸入/輸出操作以“流(stream)” 的方式進(jìn)行。

java.io包下提供了各種“流”類和接口,用以獲取不同種類的數(shù)據(jù),并通過標(biāo)準(zhǔn)的方法輸入或輸出數(shù)據(jù)。

IO流原理

輸入input:讀取外部數(shù)據(jù)(磁盤、光盤等存儲設(shè)備的數(shù)據(jù))到程序(內(nèi)存)中。

輸出output:將程序(內(nèi)存)數(shù)據(jù)輸出到磁盤、光盤等存儲設(shè)備中。

在這里插入圖片描述

流的分類

①按操作數(shù)據(jù)單位不同分為:字節(jié)流(8 bit 一般用于非文本文件),字符流(16 bit 一般用于文本文件)

②按數(shù)據(jù)流的流向不同分為:輸入流,輸出流(相對的)

③按流的角色的不同分為:節(jié)點(diǎn)流(直接處理文件),處理流(處理被包含的流)

在這里插入圖片描述

IO 流體系

Java的IO流共涉及40多個(gè)類,實(shí)際上非常規(guī)則,都是從如下4個(gè)抽象基類派生的。
由這四個(gè)類派生出來的子類名稱都是以其父類名作為子類名后綴。

在這里插入圖片描述

在這里插入圖片描述

節(jié)點(diǎn)流和處理流

節(jié)點(diǎn)流:直接從數(shù)據(jù)源或目的地讀寫數(shù)據(jù)

在這里插入圖片描述

處理流:不直接連接到數(shù)據(jù)源或目的地,而是“連接”在已存在的流(節(jié)點(diǎn)流或處理流)之上,通過對數(shù)據(jù)的處理為程序提供更為強(qiáng)大的讀寫功能。

在這里插入圖片描述

節(jié)點(diǎn)流操作

讀入以FileReader為例

import java.io.File;
import java.io.FileReader;
import java.io.IOException;

/**
 * @Author: Yeman
 * @Date: 2021-09-25-16:30
 * @Description:
 */
public class FileReaderTest {
    public static void main(String[] args) {
        FileReader fileReader = null;
        try { //一定需要try-catch
            //1、實(shí)例化File對象,指明要操作的文件
            File file = new File("IO\\hello.txt");
            //2、提供具體的流
            fileReader = new FileReader(file);
            //3、讀取操作
            int read = fileReader.read(); //空參為一位一位讀取,末尾返回-1
            while (read != -1){
                System.out.print((char) read);
                read = fileReader.read();
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            //4、關(guān)閉流
            try {
                if (fileReader != null) { //確保不會因具體流未創(chuàng)建而產(chǎn)生空指針異常
                    fileReader.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

在這里插入圖片描述

import java.io.File;
import java.io.FileReader;
import java.io.IOException;

/**
 * @Author: Yeman
 * @Date: 2021-09-25-16:30
 * @Description:
 */
public class FileReaderTest {
    public static void main(String[] args) {
        FileReader fileReader = null;
        try { //一定需要try-catch
            //1、實(shí)例化File對象,指明要操作的文件
            File file = new File("IO\\hello.txt");
            //2、提供具體的流
            fileReader = new FileReader(file);
            //3、讀取操作
            char[] chars = new char[5];
            //char型數(shù)組為參數(shù),該數(shù)組相當(dāng)于一個(gè)容器,把讀取放在里面,返回該次讀取的個(gè)數(shù),末尾返回-1
            // 最后若不夠,容器后部分仍為上一次取的,前部分則被新的這次取到的覆蓋了
            int length = fileReader.read(chars);
            while (length != -1){
                for (int i = 0; i < length; i++) {
                    System.out.print(chars[i]);
                }
                length = fileReader.read(chars);
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            //4、關(guān)閉流
            try {
                if (fileReader != null) {
                    fileReader.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

寫出以FileWriter為例

import java.io.*;

/**
 * @Author: Yeman
 * @Date: 2021-09-25-16:30
 * @Description:
 */
public class FileReaderTest {
    public static void main(String[] args) {
        FileWriter fw1 = null; //若硬盤中不存在file,創(chuàng)建之;若存在,內(nèi)容覆蓋之
        try {
            //1、實(shí)例化File對象,指明要寫出的文件
            File file = new File("IO\\hi.txt");
            //2、創(chuàng)建具體的流
            fw1 = new FileWriter(file);
            //FileWriter fw2 = new FileWriter(file,false); //若硬盤中不存在file,創(chuàng)建之;若存在,內(nèi)容覆蓋之
            //FileWriter fw3 = new FileWriter(file,true); //若硬盤中不存在file,創(chuàng)建之;若存在,內(nèi)容追加之
            //3、寫出操作
            fw1.write("Hello World!\n",0,5); //寫出“Hello”
            fw1.write("你好,世界!"); //寫出“你好,世界!”
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            //4、關(guān)閉流
            try {
                if (fw1 != null) fw1.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

實(shí)現(xiàn)一個(gè)圖片復(fù)制(讀入寫出,使用字節(jié)流)

import java.io.*;

/**
 * @Author: Yeman
 * @Date: 2021-09-25-16:30
 * @Description:
 */
public class FileReaderTest {
    public static void main(String[] args) {
        FileInputStream fis = null;
        FileOutputStream fos = null;
        try {
            File inFile = new File("IO\\input.jpg");
            File outFile = new File("IO\\output.jpg");

            fis = new FileInputStream(inFile);
            fos = new FileOutputStream(outFile);

            byte[] bytes = new byte[1024]; //通常使用1024,2的10次方
            int length = fis.read(bytes);
            while (length != -1){
                fos.write(bytes,0,length);
                length = fis.read(bytes);
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if (fos != null) fos.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
            try {
                if (fis != null) fis.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

到此這篇關(guān)于Java IO流之原理分類與節(jié)點(diǎn)流文件操作詳解的文章就介紹到這了,更多相關(guān)Java IO流內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • MyBatis增刪改查快速上手

    MyBatis增刪改查快速上手

    這篇文章給大家講解的是MyBatis 這門技術(shù)的 CURD (增刪改查) ,非常的詳細(xì)與實(shí)用,有需要的小伙伴可以參考下
    2020-02-02
  • Java中if...else語句使用的學(xué)習(xí)教程

    Java中if...else語句使用的學(xué)習(xí)教程

    這篇文章主要介紹了Java中if...else語句使用的學(xué)習(xí)教程,是Java入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下
    2015-11-11
  • Opencv實(shí)現(xiàn)身份證OCR識別的示例詳解

    Opencv實(shí)現(xiàn)身份證OCR識別的示例詳解

    這篇文章主要為大家詳細(xì)介紹了如何使用Opencv實(shí)現(xiàn)身份證OCR識別功能,文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價(jià)值,感興趣的小伙伴可以跟隨小編一起了解一下
    2024-03-03
  • springboot如何為web層添加統(tǒng)一請求前綴

    springboot如何為web層添加統(tǒng)一請求前綴

    這篇文章主要介紹了springboot如何為web層添加統(tǒng)一請求前綴,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • Java實(shí)現(xiàn)的圖像查看器完整實(shí)例

    Java實(shí)現(xiàn)的圖像查看器完整實(shí)例

    這篇文章主要介紹了Java實(shí)現(xiàn)的圖像查看器,以完整實(shí)例形式較為詳細(xì)的分析了java處理圖片的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-10-10
  • Java的List集合框架之Vector詳細(xì)解析

    Java的List集合框架之Vector詳細(xì)解析

    這篇文章主要介紹了Java的List集合框架之Vector詳細(xì)解析,List接口繼承Collection,Collection繼承于Iterable,List接口實(shí)現(xiàn)類分為Vector、ArrayList、LinkedList,Vector底層是一個(gè)Object數(shù)組,需要的朋友可以參考下
    2023-11-11
  • Deep Module深模塊之軟件設(shè)計(jì)

    Deep Module深模塊之軟件設(shè)計(jì)

    這篇文章主要介紹了軟件設(shè)計(jì)之Deep Module深模塊詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-07-07
  • java Aop實(shí)現(xiàn)自動填充字段值示例

    java Aop實(shí)現(xiàn)自動填充字段值示例

    這篇文章主要為大家介紹了Aop實(shí)現(xiàn)自動填充字段值示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-08-08
  • mybatis解決<foreach>標(biāo)簽不能超過1000的問題

    mybatis解決<foreach>標(biāo)簽不能超過1000的問題

    MyBatis是一個(gè)開源的持久層框架,它可以幫助開發(fā)者簡化數(shù)據(jù)庫操作的編寫,而foreach是MyBatis中的一個(gè)重要標(biāo)簽,用于在SQL語句中進(jìn)行循環(huán)操作,本文主要給大家介紹了mybatis解決<foreach>標(biāo)簽不能超過1000的問題,需要的朋友可以參考下
    2024-05-05
  • 深入理解java中this關(guān)鍵字的使用

    深入理解java中this關(guān)鍵字的使用

    這篇文章主要介紹了this關(guān)鍵字的使用,通過調(diào)用構(gòu)造方法,使用this關(guān)鍵字調(diào)用當(dāng)前對象等詳細(xì)介紹了this的特點(diǎn)和使用,需要的朋友可以參考下
    2017-08-08

最新評論

靖远县| 台前县| 乌拉特前旗| 宁蒗| 靖西县| 开封市| 澜沧| 松原市| 乐昌市| 精河县| 海丰县| 堆龙德庆县| 田林县| 商城县| 基隆市| 云南省| 棋牌| 渭南市| 武安市| 新泰市| 湘乡市| 云浮市| 呼和浩特市| 临颍县| 麟游县| 永春县| 甘德县| 织金县| 石门县| 双流县| 资中县| 利津县| 甘孜| 土默特右旗| 宝鸡市| 潢川县| 德惠市| 松桃| 泸溪县| 耒阳市| 曲阜市|