国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【從零開(kāi)始學(xué)習(xí)JAVA | 三十四篇】IO流

這篇具有很好參考價(jià)值的文章主要介紹了【從零開(kāi)始學(xué)習(xí)JAVA | 三十四篇】IO流。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

【從零開(kāi)始學(xué)習(xí)JAVA | 三十四篇】IO流,【從零開(kāi)始學(xué)習(xí)JAVA】,學(xué)習(xí),java,IO流,開(kāi)發(fā)語(yǔ)言

目錄

前言:

IO流介紹:

IO流的常見(jiàn)方法:

1.字節(jié)流類(lèi):

2.字符流類(lèi):

總結(jié):


前言:

? ? ? ? ? ? ? ? IO流就是存入和讀取數(shù)據(jù)的解決方案,并且他是一個(gè)知識(shí)點(diǎn)很多的章節(jié),因此我們關(guān)于IO流的介紹會(huì)分為多篇來(lái)進(jìn)行詳解,而掌握好IO流可以大大提高我們的效率,簡(jiǎn)化我們的代碼執(zhí)行效率。

IO流介紹:

在前文我們知道,如果我們想要實(shí)現(xiàn)對(duì)于程序的存檔功能,就一共需要實(shí)現(xiàn)兩個(gè)功能:

1.將數(shù)據(jù)存到文件當(dāng)中,這也就是我們上一篇文章File類(lèi)的作用

2.實(shí)現(xiàn)程序?qū)ξ募?shù)據(jù)的讀取功能,這也就是我們接下來(lái)幾篇所介紹的IO流的作用

在Java中,IO流(Input/Output Stream)是用于處理輸入和輸出的機(jī)制。它提供了讀寫(xiě)數(shù)據(jù)的方式,允許程序與文件、網(wǎng)絡(luò)等交互。Java中的IO流分為字節(jié)流和字符流兩種類(lèi)型。

字節(jié)流操作以字節(jié)為單位進(jìn)行輸入和輸出。字節(jié)流主要由InputStream和OutputStream兩個(gè)抽象類(lèi)及其各種實(shí)現(xiàn)類(lèi)組成。常見(jiàn)的字節(jié)流類(lèi)包括FileInputStream、FileOutputStream、ByteArrayInputStream、ByteArrayOutputStream等。

字符流操作以字符為單位進(jìn)行輸入和輸出,它可以直接操作Unicode字符。字符流主要由Reader和Writer兩個(gè)抽象類(lèi)及其各種實(shí)現(xiàn)類(lèi)組成。常見(jiàn)的字符流類(lèi)包括FileReader、FileWriter、BufferedReader、BufferedWriter等。

?字節(jié)流可以操作所有類(lèi)型的文件,字符流只能操作純文本文件。

IO流的常見(jiàn)方法:

1.字節(jié)流類(lèi):

1.FileOutputStream

FileOutputStream是Java IO庫(kù)中用于將數(shù)據(jù)寫(xiě)入文件的字節(jié)輸出流。它繼承自O(shè)utputStream類(lèi)并添加了一些特定于文件輸出的方法。通過(guò)FileOutputStream,我們可以將字節(jié)數(shù)據(jù)寫(xiě)入本地文件,可以是單個(gè)字節(jié),字節(jié)數(shù)組或部分字節(jié)數(shù)組。

使用FileOutputStream的基本步驟如下:

  1. 創(chuàng)建FileOutputStream對(duì)象:通過(guò)調(diào)用FileOutputStream的構(gòu)造函數(shù),指定要寫(xiě)入的文件路徑和文件名稱(chēng)。例如:FileOutputStream fos = new FileOutputStream("file.txt");

  2. 寫(xiě)入數(shù)據(jù):使用FileOutputStream提供的write()方法將數(shù)據(jù)寫(xiě)入文件。有多個(gè)重載的write()方法可以使用。常見(jiàn)的方法包括:

    • void write(int b):將指定的字節(jié)寫(xiě)入文件。
    • void write(byte[] b):將指定字節(jié)數(shù)組中的所有數(shù)據(jù)寫(xiě)入文件。
    • void write(byte[] b, int off, int len):將指定字節(jié)數(shù)組中的部分?jǐn)?shù)據(jù)寫(xiě)入文件,參數(shù)off表示數(shù)組的起始位置,參數(shù)len表示要寫(xiě)入的字節(jié)數(shù)。

    例如,使用write(byte[])方法將字符串?dāng)?shù)據(jù)寫(xiě)入文件:

    String data = "Hello, World!";
    byte[] bytes = data.getBytes();
    fos.write(bytes);
    
  3. 刷新數(shù)據(jù):如果需要將數(shù)據(jù)立即寫(xiě)入磁盤(pán)而不是等待緩沖區(qū)滿(mǎn)或關(guān)閉流時(shí)才寫(xiě)入,可以調(diào)用flush()方法。例如:fos.flush();

  4. 關(guān)閉流:使用完畢后,務(wù)必關(guān)閉FileOutputStream以釋放資源。可以使用close()方法關(guān)閉。例如:fos.close();

完整的示例代碼如下:

import java.io.FileOutputStream;
import java.io.IOException;

public class FileOutputStreamExample {
    public static void main(String[] args) {
        try {
            FileOutputStream fos = new FileOutputStream("file.txt");
            String data = "Hello, World!";
            byte[] bytes = data.getBytes();
            fos.write(bytes);
            fos.flush();
            fos.close();
            System.out.println("Data has been written to the file.");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

FileOutputStream還提供了其他一些方法,如getFD()用于獲取與流關(guān)聯(lián)的文件描述符,以及在特定位置寫(xiě)入數(shù)據(jù)的seek()方法等。

需要注意的是,使用FileOutputStream時(shí)可能會(huì)拋出IOException或FileNotFoundExceptio等異常,因此在使用時(shí)要進(jìn)行適當(dāng)?shù)漠惓L幚怼?/span>

2.FileInputStream

FileInputStream是Java IO庫(kù)中用于從文件中讀取數(shù)據(jù)的字節(jié)輸入流。它繼承自InputStream類(lèi),并提供了一些特定于文件輸入的方法。通過(guò)FileInputStream,我們可以從文件中讀取字節(jié)數(shù)據(jù),可以是單個(gè)字節(jié),也可以是一組字節(jié)。

使用FileInputStream的基本步驟如下:

  1. 創(chuàng)建FileInputStream對(duì)象:通過(guò)調(diào)用FileInputStream的構(gòu)造函數(shù),指定要讀取的文件路徑和文件名稱(chēng)。例如:FileInputStream fis = new FileInputStream("file.txt");

  2. 讀取數(shù)據(jù):使用FileInputStream提供的read()方法來(lái)讀取數(shù)據(jù)。有多個(gè)重載的read()方法可以使用。常見(jiàn)的方法包括:

    • int read():讀取一個(gè)字節(jié)的數(shù)據(jù)并返回該字節(jié)數(shù)據(jù)的整數(shù)表示(0-255),當(dāng)?shù)竭_(dá)文件末尾時(shí)返回-1。
    • int read(byte[] b):從文件中讀取一定數(shù)量的字節(jié),并將其存儲(chǔ)在指定的字節(jié)數(shù)組b中,并返回實(shí)際讀取的字節(jié)數(shù)。讀取到文件末尾時(shí)返回-1。
    • int read(byte[] b, int off, int len):從文件中讀取最多l(xiāng)en個(gè)字節(jié)到指定的字節(jié)數(shù)組b中,從數(shù)組的偏移量off開(kāi)始,并返回實(shí)際讀取的字節(jié)數(shù)。讀取到文件末尾時(shí)返回-1。

    例如,使用read(byte[])方法讀取文件中的數(shù)據(jù)并將其打印到控制臺(tái):

    FileInputStream fis = new FileInputStream("file.txt");
    byte[] buffer = new byte[1024];
    int bytesRead;
    while ((bytesRead = fis.read(buffer)) != -1) {
        System.out.write(buffer, 0, bytesRead);
    }
    
  3. 關(guān)閉流:使用完畢后,務(wù)必關(guān)閉FileInputStream以釋放資源??梢允褂胏lose()方法關(guān)閉。例如:fis.close();

完整的示例代碼如下:

import java.io.FileInputStream;
import java.io.IOException;

public class FileInputStreamExample {
    public static void main(String[] args) {
        try {
            FileInputStream fis = new FileInputStream("file.txt");
            byte[] buffer = new byte[1024];
            int bytesRead;
            while ((bytesRead = fis.read(buffer)) != -1) {
                System.out.write(buffer, 0, bytesRead);
            }
            fis.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

FileInputStream還提供了其他一些方法,例如available()返回還剩下多少可讀取的字節(jié)數(shù),skip(long n)用于跳過(guò)指定數(shù)量的字節(jié)等。

需要注意的是,使用FileInputStream時(shí)可能會(huì)拋出IOException或FileNotFoundException等異常,因此在使用時(shí)要進(jìn)行適當(dāng)?shù)漠惓L幚怼?/p>

2.字符流類(lèi):

字符流可以用來(lái)解決讀碼問(wèn)題,因?yàn)闈h字的編碼并不是一個(gè)字節(jié)大小,而如果我們?cè)谧x碼的時(shí)候按照字節(jié)流進(jìn)行輸出的話(huà),就會(huì)錯(cuò)誤的把漢字編碼轉(zhuǎn)化成為亂碼,因此我們?cè)O(shè)計(jì)了字符流,使得讀碼的時(shí)候不是按照字節(jié)來(lái)讀取,而是字符。

在Java中,字符流類(lèi)是用于讀取和寫(xiě)入字符數(shù)據(jù)的類(lèi)集合。它們都位于java.io包中,常用的字符流類(lèi)包括:

  1. FileReader和FileWriter:用于讀取和寫(xiě)入字符文件的字符流類(lèi)。

    • FileReader:用于讀取字符文件(如文本文件)。它以字符為單位讀取文件的內(nèi)容。
    • FileWriter:用于寫(xiě)入字符文件(如文本文件)。它以字符為單位將數(shù)據(jù)寫(xiě)入文件。
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

public class CharacterStreamsExample {
    public static void main(String[] args) {
        try {
            // 創(chuàng)建FileReader對(duì)象并指定要讀取的文件路徑
            FileReader reader = new FileReader("input.txt");

            // 創(chuàng)建FileWriter對(duì)象并指定要寫(xiě)入的文件路徑
            FileWriter writer = new FileWriter("output.txt");

            int character;
            // 逐字符讀取文件內(nèi)容并寫(xiě)入到輸出文件中
            while ((character = reader.read()) != -1) {
                writer.write(character);
            }

            // 關(guān)閉流
            reader.close();
            writer.close();

            System.out.println("文件復(fù)制完成!");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
  1. BufferedReader和BufferedWriter:提供了緩沖功能,加速字符輸入輸出操作。

    • BufferedReader:用于讀取字符數(shù)據(jù),并提供了緩沖功能,可以提高讀取效率。
    • BufferedWriter:用于寫(xiě)入字符數(shù)據(jù),并提供了緩沖功能,可以提高寫(xiě)入效率。
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

public class BufferedCharacterStreamsExample {
    public static void main(String[] args) {
        try {
            // 創(chuàng)建BufferedReader對(duì)象并指定要讀取的文件路徑
            BufferedReader reader = new BufferedReader(new FileReader("input.txt"));

            // 創(chuàng)建BufferedWriter對(duì)象并指定要寫(xiě)入的文件路徑
            BufferedWriter writer = new BufferedWriter(new FileWriter("output.txt"));

            String line;
            // 逐行讀取文件內(nèi)容并寫(xiě)入到輸出文件中
            while ((line = reader.readLine()) != null) {
                writer.write(line);
                writer.newLine(); // 寫(xiě)入換行符
            }

            // 關(guān)閉流
            reader.close();
            writer.close();

            System.out.println("文件復(fù)制完成!");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
  1. InputStreamReader和OutputStreamWriter:用于處理字節(jié)流和字符流之間的轉(zhuǎn)換。

    • InputStreamReader:將字節(jié)流轉(zhuǎn)換為字符流。它可以指定字符集,將字節(jié)解碼為字符。
    • OutputStreamWriter:將字符流轉(zhuǎn)換為字節(jié)流。它可以指定字符集,將字符編碼為字節(jié)。
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;

public class EncodingExample {
    public static void main(String[] args) {
        try {
            // 使用InputStreamReader將字節(jié)流轉(zhuǎn)換為字符流
            FileInputStream fis = new FileInputStream("input.txt");
            InputStreamReader reader = new InputStreamReader(fis, "UTF-8");
            int data;
            while ((data = reader.read()) != -1) {
                System.out.print((char) data);
            }
            reader.close();

            // 使用OutputStreamWriter將字符流轉(zhuǎn)換為字節(jié)流
            FileOutputStream fos = new FileOutputStream("output.txt");
            OutputStreamWriter writer = new OutputStreamWriter(fos, "UTF-8");
            writer.write("你好,世界!");
            writer.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

總結(jié):

? ? ? ? 本文我們介紹了IO流中的兩大類(lèi):字節(jié)流和字符流類(lèi)的使用方法,在實(shí)際的代碼書(shū)寫(xiě)中,我們也要根據(jù)實(shí)際情況來(lái)確定哪一個(gè)更加適合。

如果我的內(nèi)容對(duì)你有幫助,請(qǐng)點(diǎn)贊,評(píng)論,收藏。創(chuàng)作不易,大家的支持就是我堅(jiān)持下去的動(dòng)力!

【從零開(kāi)始學(xué)習(xí)JAVA | 三十四篇】IO流,【從零開(kāi)始學(xué)習(xí)JAVA】,學(xué)習(xí),java,IO流,開(kāi)發(fā)語(yǔ)言文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-643585.html

到了這里,關(guān)于【從零開(kāi)始學(xué)習(xí)JAVA | 三十四篇】IO流的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶(hù)投稿,該文觀(guān)點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【從零開(kāi)始學(xué)JAVA | 第二十四篇】單列集合的遍歷

    【從零開(kāi)始學(xué)JAVA | 第二十四篇】單列集合的遍歷

    目錄 前言: 單列集合的遍歷方式: 迭代器遍歷: 增強(qiáng)for遍歷: lambda方法遍歷:? 總結(jié): 本篇我們會(huì)講解關(guān)于單列集合的幾種遍歷方式,遍歷集合可以說(shuō)是對(duì)于集合要求掌握的最低技能,因此我們要熟練的掌握遍歷集合的方式。 在這里我們不講for循環(huán)遍歷,for循環(huán)無(wú)法對(duì)單

    2024年02月16日
    瀏覽(90)
  • 從零開(kāi)始學(xué)習(xí) Java:簡(jiǎn)單易懂的入門(mén)指南之IO字符流(三十一)

    當(dāng)使用字節(jié)流讀取文本文件時(shí),可能會(huì)有一個(gè)小問(wèn)題。就是遇到中文字符時(shí),可能不會(huì)顯示完整的字符,那是因?yàn)橐粋€(gè)中文字符可能占用多個(gè)字節(jié)存儲(chǔ)。所以Java提供一些字符流類(lèi),以字符為單位讀寫(xiě)數(shù)據(jù),專(zhuān)門(mén)用于處理文本文件。 java.io.Reader 抽象類(lèi)是表示用于讀取字符流的

    2024年02月08日
    瀏覽(87)
  • 從零開(kāi)始學(xué)習(xí) Java:簡(jiǎn)單易懂的入門(mén)指南之IO緩沖流、轉(zhuǎn)換流(三十二)

    從零開(kāi)始學(xué)習(xí) Java:簡(jiǎn)單易懂的入門(mén)指南之IO緩沖流、轉(zhuǎn)換流(三十二)

    緩沖流,也叫高效流,是對(duì)4個(gè)基本的 FileXxx 流的增強(qiáng),所以也是4個(gè)流,按照數(shù)據(jù)類(lèi)型分類(lèi): 字節(jié)緩沖流 : BufferedInputStream , BufferedOutputStream 字符緩沖流 : BufferedReader , BufferedWriter 緩沖流的基本原理,是在創(chuàng)建流對(duì)象時(shí),會(huì)創(chuàng)建一個(gè)內(nèi)置的默認(rèn)大小的緩沖區(qū)數(shù)組,通過(guò)緩沖

    2024年02月08日
    瀏覽(105)
  • 從零開(kāi)始學(xué)習(xí) Java:簡(jiǎn)單易懂的入門(mén)指南之IO序列化、打印流、壓縮流(三十三)

    從零開(kāi)始學(xué)習(xí) Java:簡(jiǎn)單易懂的入門(mén)指南之IO序列化、打印流、壓縮流(三十三)

    Java 提供了一種對(duì)象 序列化 的機(jī)制。用一個(gè)字節(jié)序列可以表示一個(gè)對(duì)象,該字節(jié)序列包含該 對(duì)象的數(shù)據(jù) 、 對(duì)象的類(lèi)型 和 對(duì)象中存儲(chǔ)的屬性 等信息。字節(jié)序列寫(xiě)出到文件之后,相當(dāng)于文件中 持久保存 了一個(gè)對(duì)象的信息。 反之,該字節(jié)序列還可以從文件中讀取回來(lái),重構(gòu)對(duì)

    2024年02月08日
    瀏覽(88)
  • 【從零開(kāi)始學(xué)習(xí)JAVA | 第三十篇】方法引用

    【從零開(kāi)始學(xué)習(xí)JAVA | 第三十篇】方法引用

    目錄 前言: 方法引用: 方法引用基本概念: 方法可以被引用的條件: 方法引用的種類(lèi): 方法引用的優(yōu)點(diǎn): 總結(jié): 方法引用作為一個(gè)重要的知識(shí)點(diǎn),雖然他使用起來(lái)很復(fù)雜,而且會(huì)降低代碼的可讀性,但是如果用好了方法引用,我們也會(huì)獲得不錯(cuò)的效率,因此我們?cè)诮裉?/p>

    2024年02月15日
    瀏覽(92)
  • 【從零開(kāi)始學(xué)習(xí)JAVA | 三十九篇】深入多線(xiàn)程

    【從零開(kāi)始學(xué)習(xí)JAVA | 三十九篇】深入多線(xiàn)程

    目錄 前言:? ? ? ?? ?1.線(xiàn)程的壽命周期? 2.線(xiàn)程的安全問(wèn)題 3.鎖 同步代碼塊: 同步方法: 死鎖: 4.生產(chǎn)者和消費(fèi)者模式(等待喚醒機(jī)制) 總結(jié): ????????當(dāng)今軟件開(kāi)發(fā)領(lǐng)域中,多線(xiàn)程編程已成為一項(xiàng)至關(guān)重要的技能。然而,要編寫(xiě)出高效、可靠的多線(xiàn)程程序并不容

    2024年02月13日
    瀏覽(88)
  • 【從零開(kāi)始學(xué)習(xí)JAVA | 第三十八篇】應(yīng)用多線(xiàn)程

    【從零開(kāi)始學(xué)習(xí)JAVA | 第三十八篇】應(yīng)用多線(xiàn)程

    目錄 前言: 多線(xiàn)程的實(shí)現(xiàn)方式: Thread常見(jiàn)的成員方法: 總結(jié): ? ? ? ? ? ?多線(xiàn)程的引入不僅僅是提高計(jì)算機(jī)處理能力的技術(shù)手段,更是適應(yīng)當(dāng)前時(shí)代對(duì)效率和性能要求的必然選擇。在本文中,我們將深入探討多線(xiàn)程的應(yīng)用和實(shí)踐,幫助讀者更好地理解和應(yīng)用多線(xiàn)程技術(shù),

    2024年02月13日
    瀏覽(109)
  • 【從零開(kāi)始學(xué)習(xí)JAVA | 第三十一篇】異常體系介紹

    【從零開(kāi)始學(xué)習(xí)JAVA | 第三十一篇】異常體系介紹

    ? ? ? ? 本文我們將為大家介紹一下異常的整個(gè)體系,而我們學(xué)習(xí)異常,不是為了敲代碼的時(shí)候不出異常,而是為了能夠熟練的處理異常,如何解決代碼中的異常。 ?我們就以這張圖作為線(xiàn)索來(lái)詳細(xì)介紹一下Java中的異常: 在Java中, Exception(異常)是一種表示非致命錯(cuò)誤或異

    2024年02月15日
    瀏覽(90)
  • 【從零開(kāi)始學(xué)習(xí)JAVA | 第三十七篇】初識(shí)多線(xiàn)程

    【從零開(kāi)始學(xué)習(xí)JAVA | 第三十七篇】初識(shí)多線(xiàn)程

    目錄 前言: ?編輯 引入: 多線(xiàn)程: ? ? ? ? 什么是多線(xiàn)程: ? ? ? ? 多線(xiàn)程的意義: ?? ? ? ?多線(xiàn)程的應(yīng)用場(chǎng)景: 總結(jié): ? ? ? ? ? ? ? ? 本章節(jié)我們將開(kāi)始學(xué)習(xí)多線(xiàn)程,多線(xiàn)程是一個(gè)很重要的知識(shí)點(diǎn),他在我們實(shí)際開(kāi)發(fā)中應(yīng)用廣泛并且基礎(chǔ),可以說(shuō)掌握多線(xiàn)程編寫(xiě)程

    2024年02月14日
    瀏覽(572)
  • 【從零開(kāi)始學(xué)習(xí)JAVA | 第三十三篇】File類(lèi)

    【從零開(kāi)始學(xué)習(xí)JAVA | 第三十三篇】File類(lèi)

    目錄 前言: File類(lèi): 構(gòu)造方法: 常見(jiàn)成員方法: 總結(jié): ? ? ? ? 本文我們將為大家介紹JAVA中一個(gè)比較使用的類(lèi):File類(lèi),他為我們提供了存儲(chǔ)數(shù)據(jù)的功能,使得程序的數(shù)據(jù)不至于在運(yùn)行結(jié)束之后就丟失,是一個(gè)很好的類(lèi)。 ????????File類(lèi)是Java標(biāo)準(zhǔn)庫(kù)中用于操作文件和目錄

    2024年02月15日
    瀏覽(96)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包