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

Java中對IO流的全面解析

 更新時間:2025年12月02日 16:22:54   作者:酷愛碼  
文章介紹了Java中IO流的分類,字符流和字節(jié)流的區(qū)別,以及字符流和字節(jié)流的常用類和方法,本文結(jié)合實例代碼給大家介紹的非常詳細,感興趣的朋友跟隨小編一起看看吧

一.IO流的類別

IO流分為字符流和字節(jié)流兩種:

字符流:一般指文本,我們能讀的懂的都可以認為是字符流。比如:文章,java文件等等。

字節(jié)流:指二進制的數(shù)據(jù),這種數(shù)據(jù)一般用文本打開我們讀不懂。比如圖片文件,mp3文件等等。

二.字符流

字符流適合處理文本文件,支持字符編碼,能夠高效地讀寫文本數(shù)據(jù)。 

字符輸入流(Reader)用于讀取文本數(shù)據(jù),常用類包括 FileReader 和 BufferedReader。
字符輸出流(Writer)用于寫入文本數(shù)據(jù),常用類包括 FileWriter 和 BufferedWriter。

1.字符輸入流

字符輸入流用于從數(shù)據(jù)源(如文件、字符串等)讀取字符數(shù)據(jù)。Reader 是所有字符輸入流的抽象基類。
FileReader :用于從文件中讀取字符數(shù)據(jù)。
InputStreamReader:將字節(jié)流轉(zhuǎn)換為字符流,可以指定字符編碼。
BufferedReader:提供緩沖功能,提高讀取效率,支持按行讀取。

import java.io.*;
public class Main {
    public static void main(String[] args) {
        // 使用 FileReader 讀取文件
        try (FileReader reader = new FileReader("D:\\a.txt")) {
            int data;
            while ((data = reader.read()) != -1) {
                System.out.print((char) data); // 逐個字符讀取
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        // 使用 InputStreamReader 讀取文件 
        try (InputStreamReader reader = new InputStreamReader(new FileInputStream("D:\\a.txt"), "UTF-8")) {
            int data;
            while ((data = reader.read()) != -1) {
                System.out.print((char) data);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        // 使用 BufferedReader 按行讀取文件
        try (BufferedReader br = new BufferedReader(new FileReader("D:\\a.txt"))) {
            String line;
            while ((line = br.readLine()) != null) {
                System.out.println(line); // 逐行讀取
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

2.字符輸出流

字符輸出流用于將字符數(shù)據(jù)寫入目標(如文件、控制臺等)。Writer 是所有字符輸出流的抽象基類。
FileWriter:用于將字符數(shù)據(jù)寫入文件。
OutputStreamWriter:將字符流轉(zhuǎn)換為字節(jié)流,可以指定字符編碼。
BufferedWriter:提供緩沖功能,提高寫入效率,支持按行寫入。

import java.io.*;
public class Main {
    public static void main(String[] args) {
        // 使用 FileWriter 寫入文件
        try{
            FileWriter writer = new FileWriter("output.txt");
            writer.write("Hello, World!"); // 寫入字符串
            writer.write("\nThis is a new line."); // 寫入換行符
            writer.close();  //這個很重要沒有這個數(shù)據(jù)寫入不進去
        } catch (IOException e) {
            e.printStackTrace();
        }
        try {
            OutputStreamWriter writer = new OutputStreamWriter(new FileOutputStream("output.txt"));
            writer.write("Hello, World!"); // 寫入字符串
            writer.write("\nThis is a new line."); // 寫入換行符
            writer.close();  //這個很重要沒有這個數(shù)據(jù)寫入不進去
        }catch (IOException e){
            e.printStackTrace();
        }
        // 使用 BufferedWriter 按行寫入文件
        try (BufferedWriter bw = new BufferedWriter(new FileWriter("output.txt"))) {
            bw.write("Hello, World!"); // 寫入字符串
            bw.newLine(); // 寫入換行符
            bw.write("This is a new line."); // 寫入另一行
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

一定要注意寫上writer.close()

3.Writer常用的五種寫入方法

(1)write(int c)     
功能:寫入單個字符。
參數(shù):c 是要寫入的字符(以 int 形式表示,低 16 位有效)。
(2)write(char[] cbuf)  
功能:寫入字符數(shù)組中的所有字符
參數(shù):cbuf 是要寫入的字符數(shù)組。
(3)write(char[] cbuf, int off, int len)
功能:寫入字符數(shù)組的一部分。
參數(shù):cbuf:字符數(shù)組。
off:起始偏移量(從數(shù)組的哪個位置開始寫入)。
len:要寫入的字符數(shù)。
(4)write(String str)
功能:寫入字符串。
參數(shù):str 是要寫入的字符串。
(5)write(String str, int off, int len)
功能:寫入字符串的一部分。
參數(shù):str:字符串。
off:起始偏移量(從字符串的哪個位置開始寫入)。
len:要寫入的字符數(shù)。

// 1. 寫入單個字符
writer.write('H');
// 2. 寫入字符數(shù)組
char[] array = {'e', 'l', 'l', 'o'};
 writer.write(array);
// 3. 寫入字符數(shù)組的一部分
writer.write(array, 1, 2); // 寫入 "ll"
// 4. 寫入字符串
writer.write(", World!");
// 5. 寫入字符串的一部分
String str = "\nThis is Java IO.";
writer.write(str, 0, 11); // 寫入 "This is Java"

三.字節(jié)流

1.字節(jié)輸入流

InputStream 是所有字節(jié)輸入流的抽象基類,它定義了讀取字節(jié)數(shù)據(jù)的基本方法。

FileInputStream(File file): 通過打開與實際文件的連接來創(chuàng)建一個 FileInputStream ,該文件由文件系統(tǒng)中的 File對象 file命名。
FileInputStream(String name): 通過打開與實際文件的連接來創(chuàng)建一個 FileInputStream ,該文件由文件系統(tǒng)中的路徑名 name命名。

常用方法:(1)int read():從輸入流中讀取一個字節(jié)的數(shù)據(jù),返回值為讀取的字節(jié)(范圍是 0 - 255),如果到達流的末尾則返回 -1。
(2)int read(byte[] b):從輸入流中讀取一定數(shù)量的字節(jié),并將其存儲在緩沖區(qū)數(shù)組 b 中,返回實際讀取的字節(jié)數(shù),如果到達流的末尾則返回 -1。
(3)int read(byte[] b, int off, int len):從輸入流中讀取最多 len 個字節(jié)的數(shù)據(jù),并將其存儲在數(shù)組 b 中,從偏移量 off 開始存儲,返回實際讀取的字節(jié)數(shù),如果到達流的末尾則返回 -1。
(4)void close():關(guān)閉此輸入流并釋放與之關(guān)聯(lián)的所有系統(tǒng)資源。

import java.io.*;
public class FileInputStreamTest {
    public static void main(String[] args)  {
        //定義輸入流
        FileInputStream fis =null;
        try {
            //1、創(chuàng)建文件對象
            File file = new File("D:\\IO\\hello.txt");
            //2、創(chuàng)建輸入流對象
            fis = new FileInputStream(file);
            //用定義字節(jié)數(shù)組,作為裝字節(jié)數(shù)據(jù)的容器
            byte[] buffer =new byte[5];
            int len;//記錄每次讀取的字節(jié)個數(shù)
            System.out.println(fis.read(buffer));
            while ((len=fis.read(buffer))!=-1){
                //轉(zhuǎn)成String型,否則輸出ASCII碼
                String str=new String(buffer,0,len);
                System.out.println(str);
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            //釋放資源
            try {
                fis.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

2.字節(jié)輸出流

OutputStream是所有字節(jié)輸出流的父類,定義了所有字節(jié)輸出流都具有的共同特征。

FileOutputStream(File file):創(chuàng)建文件輸出流以寫入由指定的 File對象表示的文件。
FileOutputStream(String name): 創(chuàng)建文件輸出流以指定的名稱寫入文件。
FileOutputStream(String name,boolean append): 創(chuàng)建文件輸出流以指定的名稱寫入文件,每次輸出文件是否繼續(xù)拼接。

常用方法:(1)void write(byte b):把一個字節(jié)寫入到文件中。
(2)void write(byte[] b):把數(shù)組b 中的所有字節(jié)寫入到文件中。
(3)void write(byte[] b,int off,int len):把數(shù)組b中的字節(jié)從 off 索引開始的 len 個字節(jié)寫入到文件中。

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
public class FileOutputStreamTest {
    public static void main (String[] args)  {
        //定義字節(jié)輸出流
        FileOutputStream fos =null;
        try {
            //1、創(chuàng)建文件對象
            File file = new File("D:\\IO\\hello.txt");
            //2、創(chuàng)建輸出流對象
            fos = new FileOutputStream(file);
            fos.write(97);
            //后面的 \r\n表示回車換行
            fos.write("中國人!\r\n".getBytes());
            //從索引2開始輸出4個字節(jié)
            fos.write("ABCDEFGH".getBytes(),2,4);
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            //釋放資源
            try {
                fos.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
}

到此這篇關(guān)于Java中Map.Entry鍵值對的概念與應(yīng)用實踐的文章就介紹到這了,更多相關(guān)Java中Map.Entry鍵值對內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SpringBoot整合Lombok及常見問題解決

    SpringBoot整合Lombok及常見問題解決

    本文主要介紹了SpringBoot整合Lombok及常見問題解決,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-04-04
  • JFreeChart實現(xiàn)實時曲線圖

    JFreeChart實現(xiàn)實時曲線圖

    這篇文章主要為大家詳細介紹了JFreeChart實現(xiàn)實時曲線圖的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-06-06
  • SpringBoot整合LDAP的流程分析

    SpringBoot整合LDAP的流程分析

    這篇文章主要介紹了SpringBoot整合LDAP的流程分析,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-05-05
  • springboot項目整合注冊功能模塊開發(fā)實戰(zhàn)

    springboot項目整合注冊功能模塊開發(fā)實戰(zhàn)

    這篇文章主要介紹了springboot項目整合注冊功能模塊開發(fā)實戰(zhàn),在用戶的注冊是首先需要查詢當前的用戶名是否存在,如果存在則不能進行注冊,相當于一個查詢語句,本文通過實例代碼詳細講解,需要的朋友可以參考下
    2022-11-11
  • java設(shè)計模式--橋接模式詳解

    java設(shè)計模式--橋接模式詳解

    這篇文章主要為大家詳細介紹了java設(shè)計模式之橋接模式,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能給你帶來幫助
    2021-07-07
  • Java日常練習題,每天進步一點點(59)

    Java日常練習題,每天進步一點點(59)

    下面小編就為大家?guī)硪黄狫ava基礎(chǔ)的幾道練習題(分享)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧,希望可以幫到你
    2021-08-08
  • Spring的自定義擴展標簽NamespaceHandler解析

    Spring的自定義擴展標簽NamespaceHandler解析

    這篇文章主要介紹了Spring的自定義擴展標簽NamespaceHandler解析,在很多情況下,我們需要為系統(tǒng)提供可配置化支持,簡單的做法可以直接基于Spring的標準Bean來配置,Spring提供了可擴展Schema的支持,這是一個不錯的折中方案,需要的朋友可以參考下
    2023-12-12
  • Java簡單實現(xiàn)猜數(shù)字游戲附C語言版本

    Java簡單實現(xiàn)猜數(shù)字游戲附C語言版本

    猜數(shù)字是興起于英國的益智類小游戲,起源于20世紀中期,一般由兩個人或多人玩,也可以由一個人和電腦玩。游戲規(guī)則為一方出數(shù)字,一方猜,今天我們來用Java和C語言分別把這個小游戲?qū)懗鰜砭毦毷?/div> 2021-11-11
  • Java實現(xiàn)分布式系統(tǒng)限流

    Java實現(xiàn)分布式系統(tǒng)限流

    這篇文章主要為大家詳細介紹了Java實現(xiàn)分布式系統(tǒng)限流,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • SpringBoot整合Drools規(guī)則引擎動態(tài)生成業(yè)務(wù)規(guī)則的實現(xiàn)

    SpringBoot整合Drools規(guī)則引擎動態(tài)生成業(yè)務(wù)規(guī)則的實現(xiàn)

    本文主要介紹了SpringBoot整合Drools規(guī)則引擎動態(tài)生成業(yè)務(wù)規(guī)則的實現(xiàn),文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-12-12

最新評論

通渭县| 林西县| 株洲县| 宁阳县| 常宁市| 中山市| 临桂县| 额尔古纳市| 东阿县| 通榆县| 兴仁县| 西昌市| 常山县| 柳河县| 开封县| 章丘市| 枣强县| 安阳县| 蕲春县| 神农架林区| 浦城县| 阜平县| 安仁县| 泰来县| 德格县| 孟村| 安丘市| 台中县| 岳池县| 鸡东县| 锦屏县| 霍林郭勒市| 交口县| 平和县| 白城市| 和林格尔县| 多伦县| 招远市| 高阳县| 马公市| 塔城市|