中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java節點流與字符流分別有什么用

發布時間:2021-06-22 17:53:42 來源:億速云 閱讀:156 作者:chen 欄目:開發技術

這篇文章主要講解了“Java節點流與字符流分別有什么用”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“Java節點流與字符流分別有什么用”吧!

一、File

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

1.1 File的用法

用法:

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

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

注意:在windows中,路徑名不能使用單個的\,單個的\為轉義字符,可以使用\\///

1.2 File的常用方法

1.boolean createNewFile()

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

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

2.boolean delete()

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

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

3.boolean exists()

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

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

4.String getName()

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

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

5.long lastModified()

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

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

二、IO流

File 類:

只能操作文件外部的內容,無法操作文件內部內容的讀寫

流:
數據以先入先出的順序進行傳輸,流就是管道,就是用來 傳輸數據的

IO 流:
java提供了一個io包,提供了很多類,提供了很多功能能夠實現數據的讀寫

2.1 流的概念

數據源就像水箱,流就像水管中流著的水流,程序就是我們最終的用戶。 流是一個抽象、動態的概念, 是一連串連續動態的數據集合

2.2 流的分類

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

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

按功能可分為節點流(可以直接從數據源或目的地讀寫數據)和功能流(是處理流的流。通過對其他流的處理提高程序的性能)

2.3 IO操作步驟

在進行任何操作之前,首先要明確目的(讀還是寫),找準源頭(讀取),找準目的地(寫出)

1.建立聯系 :這一步驟是為了獲取流,如果此時是文件,則需要將文件抽象到內存形成對象。后期也 可以是其他的數據源

2.選擇流:從讀寫、數據單元和功能方面考慮。輸入|輸出,字節|字符,結點流|處理流。

3.執行操作:該讀就讀,該寫就寫。考慮是一次性完成還行需要循環。

4.釋放資源:程序中打開的文件 IO 資源不屬于內存中的資源,垃圾回收無法回收,需要顯示關閉。

2.4 基本輸入流(InputStream和Reader)

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

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

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

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

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

字節 -> 任意數據, 但是如果操作是字符的話,還需要我們轉換(麻煩)

單個字節讀取

以InputStream為例,Reader同理

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

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

        //關閉
        is.close();

    }
}

多個字節讀取

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

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

        //關閉
        is.close();

    }
}

2.5 基本輸出流(OutputStream和Writer)

以OutputStream為例,Writer同理

注意:在關閉(close)輸出流前需要先清空(flush)緩存區的數據

flush()一般主要用在IO中,即清空緩沖區數據,就是說你用讀寫流的時候,其實數據是先被讀到了內存中,然后用數據寫到文件中,當你數據讀完的時候不代表你的數據已經寫完了,因為還有一部分有可能會留在內存這個緩沖區中。這時候如果你調用了 close()方法關閉了讀寫流,那么這部分數據就會丟失,所以應該在關閉讀寫流之前先flush(),先清空數據。

單字節寫入

public class OutputStream01 {

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

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

多字節輸入

public class OutputStream02 {

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

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

        //轉為字節數據存入數組
        byte[] arr = str.getBytes();

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

        //刷出數據
        os.flush();
        //關閉
        os.close();
    }
}

2.6 輸入輸出聯合使用

以InputStream和OutputStream為例

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

            //創建輸入數組
            byte[] arr = new byte[1024];

            int len = -1;

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

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

}

2.7 異常的處理

在使用IO流的時候會出現編譯時異常,可以使用拋出異常抓取異常來處理

拋出異常

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

抓取異常

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

    }
}

2.8 字節流與字符流的區別

字節流和字符流的區別:

1.每次讀寫的字節數不同;

2.字符流是塊讀寫,字節流是字節讀寫;

3.字符流帶有緩存,字節流沒有。

java流在處理上分為字符流和字節流。字符流處理的單元為2個字節的Unicode字符,分別操作字符、字符數組或字符串,而字節流處理單元為1個字節,操作字節和字節數組。

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

感謝各位的閱讀,以上就是“Java節點流與字符流分別有什么用”的內容了,經過本文的學習后,相信大家對Java節點流與字符流分別有什么用這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

恩平市| 印江| 汝城县| 喜德县| 白朗县| 怀安县| 印江| 漯河市| 武穴市| 清河县| 孝义市| 崇阳县| 阜城县| 昌都县| 远安县| 闸北区| 通城县| 东明县| 常熟市| 新绛县| 渭源县| 昌图县| 政和县| 富平县| 平乡县| 交城县| 武鸣县| 沾益县| 北辰区| 盐边县| 旅游| 岢岚县| 麦盖提县| 荔浦县| 昌邑市| 鄂尔多斯市| 许昌县| 辰溪县| 新巴尔虎右旗| 宝丰县| 苗栗县|