欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java IO流之節(jié)點(diǎn)流與字符流的相關(guān)知識(shí)總結(jié)

 更新時(shí)間:2021年06月22日 15:42:20   作者:Namtheun  
今天給大家?guī)?lái)的是關(guān)于Java的相關(guān)知識(shí),文章圍繞著Java節(jié)點(diǎn)流與字符流展開,文中有非常詳細(xì)的介紹及代碼示例,需要的朋友可以參考下

一、File

file是文件和目錄路徑名的抽象表示

1.1 File的用法

用法:

File file = new File("路徑名");

//如
File file = new File("L:\\FileTestDemo\\AAA\\aaa.txt");

注意:在windows中,路徑名不能使用單個(gè)的\,單個(gè)的\為轉(zhuǎn)義字符,可以使用\\,///

1.2 File的常用方法

1.boolean createNewFile()

當(dāng)且僅當(dāng)具有此名稱的文件尚不存在時(shí),以原子方式創(chuàng)建由此抽象路徑名命名的新空文件。 注意: 不能創(chuàng)建文件夾,只能創(chuàng)建文件

 System.out.println(file.createNewFile());  //true or false表示是否創(chuàng)建成功

2.boolean delete()

刪除此抽象路徑名表示的文件或目錄。

System.out.println(file.delete());

3.boolean exists()

測(cè)試此抽象路徑名表示的文件或目錄是否存在。

if(!file.exists()){
    System.out.println("文件不存在,創(chuàng)建"+ file.createNewFile());
}

4.String getName()

返回此抽象路徑名表示的文件或目錄的名稱。

System.out.println(file.getName());

5.long lastModified()

返回上次修改此抽象路徑名表示的文件的時(shí)間。

System.out.println(new SimpleDateFormat().format(new Date(file.lastModified())));

二、IO流

File 類:

只能操作文件外部的內(nèi)容,無(wú)法操作文件內(nèi)部?jī)?nèi)容的讀寫

流:
數(shù)據(jù)以先入先出的順序進(jìn)行傳輸,流就是管道,就是用來(lái) 傳輸數(shù)據(jù)的

IO 流:
java提供了一個(gè)io包,提供了很多類,提供了很多功能能夠?qū)崿F(xiàn)數(shù)據(jù)的讀寫

2.1 流的概念

數(shù)據(jù)源就像水箱,流就像水管中流著的水流,程序就是我們最終的用戶。 流是一個(gè)抽象、動(dòng)態(tài)的概念, 是一連串連續(xù)動(dòng)態(tài)的數(shù)據(jù)集合

2.2 流的分類

按流向可分為輸入流(InputStream和Reader)和輸出流(OutputStream和Writer)

按操作單元可分為字節(jié)流(InputStream 和 OutputStream)和字符流(Reader 和 Writer)

按功能可分為節(jié)點(diǎn)流(可以直接從數(shù)據(jù)源或目的地讀寫數(shù)據(jù))和功能流(是處理流的流。通過(guò)對(duì)其他流的處理提高程序的性能)

2.3 IO操作步驟

在進(jìn)行任何操作之前,首先要明確目的(讀還是寫),找準(zhǔn)源頭(讀?。覝?zhǔn)目的地(寫出)

1.建立聯(lián)系 :這一步驟是為了獲取流,如果此時(shí)是文件,則需要將文件抽象到內(nèi)存形成對(duì)象。后期也 可以是其他的數(shù)據(jù)源

2.選擇流:從讀寫、數(shù)據(jù)單元和功能方面考慮。輸入|輸出,字節(jié)|字符,結(jié)點(diǎn)流|處理流。

3.執(zhí)行操作:該讀就讀,該寫就寫??紤]是一次性完成還行需要循環(huán)。

4.釋放資源:程序中打開的文件 IO 資源不屬于內(nèi)存中的資源,垃圾回收無(wú)法回收,需要顯示關(guān)閉。

2.4 基本輸入流(InputStream和Reader)

int read() -> 返回值是這一次讀取到的內(nèi)容(一個(gè)字節(jié)的值, 一個(gè)字符的值)

int read(byte[] car) -> 將讀取到的字節(jié)臨時(shí)存儲(chǔ)到car數(shù)組中, 返回實(shí)際讀取到的字節(jié)數(shù)量

int reade(char[] car) -> 將讀取到的字符臨時(shí)存儲(chǔ)到car數(shù)組中, 返回實(shí)際讀取到的字符數(shù)量

無(wú)論以何種方式 read(), read([]) 讀取文件, -1,就意味著讀取到文件末尾

字符 -> 只能操作文本,直接讀取到的就是字符

字節(jié) -> 任意數(shù)據(jù), 但是如果操作是字符的話,還需要我們轉(zhuǎn)換(麻煩)

單個(gè)字節(jié)讀取

以InputStream為例,Reader同理

public class IOTest {
    public static void main(String[] args) throws IOException {
        //選擇流,建立聯(lián)系
        InputStream is = new FileInputStream("L:\\FileTestDemo\\123.txt");

        //無(wú)論以何種方式 read(), read([]) 讀取文件, -1,就意味著讀取到文件末尾 
        //則當(dāng)result的值為-1時(shí)結(jié)束
        int result = -1;
        while((result = is.read()) != -1){
            System.out.println((char)result);
        }

        //關(guān)閉
        is.close();

    }
}

多個(gè)字節(jié)讀取

public class IOTest {
    public static void main(String[] args) throws IOException {
        //選擇流,建立聯(lián)系
        InputStream is = new FileInputStream("L:\\FileTestDemo\\123.txt");

        //定義運(yùn)輸數(shù)組
        byte[] car = new byte[1024];
        int len = -1;
        //當(dāng)result的值為-1時(shí)結(jié)束
        while ((len = is.read(car)) != -1){
            System.out.println(new String(car,0,len));
        }

        //關(guān)閉
        is.close();

    }
}

2.5 基本輸出流(OutputStream和Writer)

以O(shè)utputStream為例,Writer同理

注意:在關(guān)閉(close)輸出流前需要先清空(flush)緩存區(qū)的數(shù)據(jù)

flush()一般主要用在IO中,即清空緩沖區(qū)數(shù)據(jù),就是說(shuō)你用讀寫流的時(shí)候,其實(shí)數(shù)據(jù)是先被讀到了內(nèi)存中,然后用數(shù)據(jù)寫到文件中,當(dāng)你數(shù)據(jù)讀完的時(shí)候不代表你的數(shù)據(jù)已經(jīng)寫完了,因?yàn)檫€有一部分有可能會(huì)留在內(nèi)存這個(gè)緩沖區(qū)中。這時(shí)候如果你調(diào)用了 close()方法關(guān)閉了讀寫流,那么這部分?jǐn)?shù)據(jù)就會(huì)丟失,所以應(yīng)該在關(guān)閉讀寫流之前先f(wàn)lush(),先清空數(shù)據(jù)。

單字節(jié)寫入

public class OutputStream01 {

    public static void main(String[] args) throws IOException {
        選擇流,建立聯(lián)系
        OutputStream os = new FileOutputStream("L:\\FileTestDemo\\abc.txt",true);
        //寫入數(shù)據(jù)
        os.write('a');

        //刷出流
        os.flush();
        //關(guān)閉
        os.close();
    }
}

多字節(jié)輸入

public class OutputStream02 {

    public static void main(String[] args) throws IOException {
        //構(gòu)建輸出流
        OutputStream os = new FileOutputStream("L:\\FileTestDemo\\abc.txt");

        //需要寫入的數(shù)據(jù)
        String str = "我好菜啊\n" +
                "就這?\n" +
                "\t\t\t不是吧,阿sir";

        //轉(zhuǎn)為字節(jié)數(shù)據(jù)存入數(shù)組
        byte[] arr = str.getBytes();

        //寫入數(shù)據(jù)
        os.write(arr);

        //刷出數(shù)據(jù)
        os.flush();
        //關(guān)閉
        os.close();
    }
}

2.6 輸入輸出聯(lián)合使用

以InputStream和OutputStream為例

public class In_Out {
    public static void main(String[] args){
		//提升作用域范圍
        InputStream is = null;
        OutputStream os = null;
        try {
            //創(chuàng)建輸入流
            is = new FileInputStream("L:\\FileTestDemo\\aaa.txt");
            os = new FileOutputStream("L:\\FileTestDemo\\abc\\bbb.txt");

            //創(chuàng)建輸入數(shù)組
            byte[] arr = new byte[1024];

            int len = -1;

            while ((len = is.read(arr)) != -1){
                //write(byte[] b, int off, int len) 將從偏移量 off開始的指定字節(jié)數(shù)組中的 len字節(jié)寫入此輸出流
                os.write(arr,0,len);
            }

            //刷出
            os.flush();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            //后打開,先關(guān)閉
            //先關(guān)閉輸出流
            if(os != null){
                try {
                    os.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            //再關(guān)閉輸入流
            if(is != null){
                try {
                    is.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }

}

2.7 異常的處理

在使用IO流的時(shí)候會(huì)出現(xiàn)編譯時(shí)異常,可以使用拋出異常抓取異常來(lái)處理

拋出異常

public class IOTest {
    
    public static void main(String[] args) throws IOException {
        //建立聯(lián)系可能會(huì)遇到找不到文件位置(FileNotFoundException)異常
        //這時(shí)候可以拋出(throw)異常
        InputStream is = new FileInputStream("L:\\FileTestDemo\\123.txt");
    }
}

抓取異常

public class IOTest {
    public static void main(String[] args){
    	//通過(guò)try...carch...來(lái)抓取異常
        try {
            InputStream is = new FileInputStream("L:\\FileTestDemo\\123.txt");
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }

    }
}

2.8 字節(jié)流與字符流的區(qū)別

字節(jié)流和字符流的區(qū)別:

1.每次讀寫的字節(jié)數(shù)不同;

2.字符流是塊讀寫,字節(jié)流是字節(jié)讀寫;

3.字符流帶有緩存,字節(jié)流沒(méi)有。

java流在處理上分為字符流和字節(jié)流。字符流處理的單元為2個(gè)字節(jié)的Unicode字符,分別操作字符、字符數(shù)組或字符串,而字節(jié)流處理單元為1個(gè)字節(jié),操作字節(jié)和字節(jié)數(shù)組。

字符流和字節(jié)流,一個(gè)屬性范圍小,一個(gè)屬性范圍大,字符流只能是字符這一種類型,但是字節(jié)流中可以是字符,可以是二進(jìn)制文件,可以是音頻,可以是各種各樣的類型,只要符合字節(jié)形式存儲(chǔ)的都可以接字節(jié)流,而字符流只能接字符。

到此這篇關(guān)于Java IO流之節(jié)點(diǎn)流與字符流的相關(guān)知識(shí)總結(jié)的文章就介紹到這了,更多相關(guān)Java節(jié)點(diǎn)流與字符流內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SpringBoot實(shí)現(xiàn)接口的各種參數(shù)校驗(yàn)的示例

    SpringBoot實(shí)現(xiàn)接口的各種參數(shù)校驗(yàn)的示例

    本文主要介紹了SpringBoot實(shí)現(xiàn)接口的各種參數(shù)校驗(yàn)的示例,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • 一篇文章帶你了解Java方法的使用

    一篇文章帶你了解Java方法的使用

    這篇文章主要給大家介紹了關(guān)于Java中方法使用的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-08-08
  • idea添加數(shù)據(jù)庫(kù)圖文教程

    idea添加數(shù)據(jù)庫(kù)圖文教程

    這篇文章主要介紹了idea添加數(shù)據(jù)庫(kù)圖文教程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-09-09
  • 關(guān)于synchronized有趣的同步問(wèn)題

    關(guān)于synchronized有趣的同步問(wèn)題

    今天小編就為大家分享一篇關(guān)于關(guān)于synchronized有趣的同步問(wèn)題,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2019-01-01
  • JWT 設(shè)置token過(guò)期時(shí)間無(wú)效的解決

    JWT 設(shè)置token過(guò)期時(shí)間無(wú)效的解決

    這篇文章主要介紹了JWT 設(shè)置token過(guò)期時(shí)間無(wú)效的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • Resty開發(fā)restful版本的Jfinal深入研究

    Resty開發(fā)restful版本的Jfinal深入研究

    這篇文章主要為大家介紹了Resty開發(fā)restful版本的Jfinal深入研究有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-03-03
  • JAVA線程池監(jiān)控以及動(dòng)態(tài)調(diào)整示例詳解

    JAVA線程池監(jiān)控以及動(dòng)態(tài)調(diào)整示例詳解

    這篇文章主要為大家介紹了JAVA線程池監(jiān)控以及動(dòng)態(tài)調(diào)整示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-09-09
  • java多線程編程技術(shù)詳解和實(shí)例代碼

    java多線程編程技術(shù)詳解和實(shí)例代碼

    這篇文章主要介紹了 java多線程編程技術(shù)詳解和實(shí)例代碼的相關(guān)資料,需要的朋友可以參考下
    2017-04-04
  • Spring Bean的屬性注入方式

    Spring Bean的屬性注入方式

    這篇文章主要介紹了Spring Bean的屬性注入方式的相關(guān)資料,需要的朋友可以參考下
    2018-02-02
  • Java Collection和Collections的區(qū)別

    Java Collection和Collections的區(qū)別

    本文主要介紹了Java Collection和Collections的區(qū)別,Collection?是表示集合的接口,而?Collections?是對(duì)集合進(jìn)行操作的工具類,下面就來(lái)介紹一下具體用法,感興趣的可以了解一下
    2023-12-12

最新評(píng)論