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

Java新手學習之IO流的簡單使用

 更新時間:2021年10月15日 10:44:30   作者:碼小春  
IO主要用于設備之間的數據傳輸,Java將操作數據流的功能封裝到了IO包中,這篇文章主要給大家介紹了關于Java新手學習之IO流簡單使用的相關資料,需要的朋友可以參考下

前言

在我們平時使用圖形化界面的時候,會發(fā)現來建立一個文件夾或者一個文檔的時候很簡單,只需要在桌面單擊鼠標右鍵就可以了。但是,在我們寫項目的時候想要把一些東西存到文件夾里面怎么辦吶?

 不可能程序運行到需要文件夾的時候我再來到桌面或者哪里來手動建立一個文件或者文檔吧?不要懷疑自己這樣操作是肯定不行的,那有的人就會想了那我們怎么辦吶?這不博主就來幫大家的忙了嘛,在java中有個東西叫做IO流就可以很好的解決這個問題。什么是IO流吶?接下來就由我來帶領大家了解什么是IO流!

IO流

1、基本概念

IO:Java對數據的操作是通過流的方式,IO流用來處理設備之間的數據傳輸,上傳文件和下載文件,Java用于操作流的對象都在IO包中。

Java.io 包幾乎包含了所有操作輸入、輸出需要的類。所有這些流類代表了輸入源和輸出目標。

Java.io 包中的流支持很多種格式,比如:基本類型、對象、本地化字符集等等。

一個流可以理解為一個數據的序列。輸入流表示從一個源讀取數據,輸出流表示向一個目標寫數據。Java 為 I/O 提供了強大的而靈活的支持,使其更廣泛地應用到文件傳輸和網絡編程中。

 2、IO流分類

圖示:

 3、File

在學習IO流之前我們要先明白如何利用程序創(chuàng)建一個文件夾或者一個文本文檔,這樣我們才能在往文件里面寫東西的時候知道怎么寫應該寫到什么地方去。

3.1File基本概念

File是文件和目錄路徑名的抽象表示,文件和目錄是可以通過File封裝成對象的對于File而言,其封裝的并不是一個真正存在的文件,僅僅是一個路徑名而已。它可以是存在的,也可以是不存在的。將來是要通過具體的操作把這個路徑的內容轉換為具體存在的

3.2創(chuàng)建文本

File中創(chuàng)建文本的方方法常用的就一個:

 代碼創(chuàng)建一個Test.txt的文本:

import java.io.File;
 
public class CreateDir {
    public static void main(String[] args) {
        File f1 = new File("E:\\Test.txt");
        // 現在創(chuàng)建目錄
        f1.createNewFile();
    }
}

3.3創(chuàng)建目錄

File中有兩個方法來創(chuàng)建文件夾:

mkdir( )方法創(chuàng)建一個文件夾,成功則返回true,失敗則返回false。失敗表明File對象指定的路徑已經存在,或者由于整個路徑還不存在,該文件夾不能被創(chuàng)建。
mkdirs()方法創(chuàng)建一個文件夾和它的所有父文件夾。

 代碼創(chuàng)建一個 "/tmp/user/java/bin"文件夾:

import java.io.File;
 
public class CreateDir {
    public static void main(String[] args) {
        String dirname = "/tmp/user/java/bin";
        File d = new File(dirname);
        // 現在創(chuàng)建目錄
        d.mkdirs();
    }
}

3.4判斷、讀取和刪除

File類中的一些常用方法給大家寫在下面了

判斷:

public boolean isDirectory() 測試此抽象路徑名表示的File是否為目錄
public boolean isFile() 測試此抽象路徑名表示的File是否為文件
public boolean exists() 測試此抽象路徑名表示的File是否存在

讀取:

public String getAbsolutePath() 返回此抽象路徑名的絕對路徑名字符串
public String getPath() 將此抽象路徑名轉換為路徑名字符串
public String getName() 返回由此抽象路徑名表示的文件或目錄的名稱
public String[] list() 返回此抽象路徑名表示的目錄中的文件和目錄的名稱字符串數組
public File[] listFiles() 返回此抽象路徑名表示的目錄中的文件和目錄的File對象數組

刪除:

public boolean delete() 刪除由此抽象路徑名表示的文件或目錄

判斷、讀取和刪除的使用方法和前面的創(chuàng)建都差不太多就不一一進行代碼展示了。一般只需要知道有這些方法就行,實在記不住可以在API上進行查找。

4、字節(jié)流

 4.1字節(jié)流的抽象基類

這是字節(jié)流所有類的超類:

InputStream:這個抽象類是表示字節(jié)輸入流的所有類的超類

OutputStream:這個抽象類是表示字節(jié)輸出流的所有類的超類

子類名特點:子類名稱都是以其父類名作為子類名的后綴

4.2字節(jié)流寫數據

4.2.1常用字節(jié)流寫數據的類:

void write(int b) 將指定的字節(jié)寫入此文件輸出流 一次寫一個字節(jié)數據
void write(byte[] b) 將 b.length字節(jié)從指定的字節(jié)數組寫入此文件輸出流 一次寫一個字節(jié)數組數據
void write(byte[] b, int off, int len) 將 len字節(jié)從指定的字節(jié)數組開始,從偏移量off開始寫入此文件輸出流 一次寫一個字節(jié)數組的部分數據

 代碼:

import java.io.*;
 
public class CreateDir {
    public static void main(String[] args) {
        FileOutputStream fos = new FileOutputStream("myByteStream\\fos.txt");        
//FileOutputStvoid write(int b):將指定的字節(jié)寫入此文件輸出流
        fos.write(97);
        fos.write(98);
        fos.write(99);
        fos.write(100);
        fos.write(101);
        fos.close;
    }
}

4.2.2換行和追加

(1)在字節(jié)流中如何實現換行吶?在不同的操作系統(tǒng)中換行是不一樣的:

windows:\r\n

linux:\n

mac:\r

 (2)字節(jié)流寫數據如何實現追加寫入

public FileOutputStream(String name,boolean append)

創(chuàng)建文件輸出流以指定的名稱寫入文件。如果第二個參數為true ,則字節(jié)將寫入文件的末尾而不是開頭

4.3字節(jié)流讀數據

讀取數據使用read方法:每次可以讀取一個字節(jié)的數據,提升為int類型,讀取到文件末尾,返回-1。

代碼如下:

public class FileInputStreamDemo01 {
    public static void main(String[] args) throws IOException {
        //創(chuàng)建字節(jié)輸入流對象
        //FileInputStream(String name)
        FileInputStream fis = new FileInputStream("myByteStream\\fos.txt");
 
        int by;
        /*
            fis.read():讀數據
            by=fis.read():把讀取到的數據賦值給by
            by != -1:判斷讀取到的數據是否是-1
         */
        //一個一個的讀
        while ((by=fis.read())!=-1) {
            System.out.print((char)by);
        }
        //一個指定的數組長度來讀
        byte[] bys = new byte[1024]; //1024及其整數倍
        int len;
        while ((len=fis.read(bys))!=-1) {
            System.out.print(new String(bys,0,len));
        }
 
        //釋放資源
        fis.close();
    }
}

5、字符流

5.1由來

字符流的由來:因為數據編碼的不同,因而有了對字符進行高效操作的流對象,字符流本質其實就是基于字節(jié)流讀取時,去查了指定的碼表,而字節(jié)流直接讀取數據會有亂碼的問題(讀中文會亂碼)。

字節(jié)流讀取中文字符時,可能不會顯示完整的字符,那是因為一個中文字符占用多個字節(jié)存儲。

而字符流 = 字節(jié)流 + 編碼表

5.2字符流寫數據

字符流寫數據常用的方法

void write(int c) 寫一個字符
void write(char[] cbuf) 寫入一個字符數組
void write(char[] cbuf, int off, int len) 寫入字符數組的一部分
void write(String str) 寫一個字符串
void write(String str, int off, int len) 寫一個字符串的一部分

刷新和關閉方法:

flush() 刷新流,之后還可以繼續(xù)寫數據
close() 關閉流,釋放資源,但是在關閉之前會先刷新流。一旦關閉,就不能再寫數據

 示例代碼:

        OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("myCharStream\\osw.txt"));
 
        //void write(int c):寫一個字符
        osw.write(97);
 
 
        //void writ(char[] cbuf):寫入一個字符數組
        char[] chs = {'a', 'b', 'c', 'd', 'e'};
        osw.write(chs);
 
        //void write(char[] cbuf, int off, int len):寫入字符數組的一部分
        osw.write(chs, 0, chs.length);
        osw.write(chs, 1, 3);
 
        //void write(String str):寫一個字符串
        osw.write("abcde");
 
        //void write(String str, int off, int len):寫一個字符串的一部分
        osw.write("abcde", 0, "abcde".length());
        osw.write("abcde", 1, 3);
 
        //釋放資源
        osw.close();

5.3字符流讀數據

讀數據的兩種方法

int read()一次讀一個字符數據int read(char[] cbuf)一次讀一個字符數組數據

 代碼示例:

  InputStreamReader isr = new InputStreamReader(new FileInputStream("myCharStream\\ConversionStreamDemo.java"));
 
        //int read():一次讀一個字符數據
        int ch;
        while ((ch=isr.read())!=-1) {
            System.out.print((char)ch);
        }
 
        //int read(char[] cbuf):一次讀一個字符數組數據
        char[] chs = new char[1024];
        int len;
        while ((len = isr.read(chs)) != -1) {
            System.out.print(new String(chs, 0, len));
        }

6、IO流小結

字節(jié)流:

 字符流:

 如果我們需要追求效率我們可以選擇字符流和字節(jié)流都具有的Buffered開頭的類使用方法和字節(jié)流字符流的使用方法相同。在我們使用了流之后我們需要關閉流,如果不關閉占用的資源就會很多太多了就會影響我們的運行速度。

7、特殊操作流

特殊操作流一般使用的時候比較少就只給大家列出來知道有這個流是拿來干嘛的,如果在使用中需要用到特殊操作流的話我們可以去查API查看具體的使用方法。

7.1標準輸入輸出流

- public static final InputStream in:標準輸入流。通常該流對應于鍵盤輸入或由主機環(huán)境或用戶指定的另一個輸入源
- public static final PrintStream out:標準輸出流。通常該流對應于顯示輸出或由主機環(huán)境或用戶指定的另一個輸出目標

 7.2字節(jié)打印流

- PrintStream(String fileName):使用指定的文件名創(chuàng)建新的打印流

- 使用繼承父類的方法寫數據,查看的時候會轉碼;使用自己的特有方法寫數據,查看的數據原樣輸出

- 可以改變輸出語句的目的地

  ​    public static void setOut(PrintStream out):重新分配“標準”輸出流

 7.3對象序列化流和對象反序列化流

7.3.1對象序列化流

對象序列化介紹

  • 對象序列化:就是將對象保存到磁盤中,或者在網絡中傳輸對象
  • 這種機制就是使用一個字節(jié)序列表示一個對象,該字節(jié)序列包含:對象的類型、對象的數據和對象中存儲的屬性等信息
  • 字節(jié)序列寫到文件之后,相當于文件中持久保存了一個對象的信息
  • 反之,該字節(jié)序列還可以從文件中讀取回來,重構對象,對它進行反序列化

對象序列化流: ObjectOutputStream

  • 將Java對象的原始數據類型和圖形寫入OutputStream。 可以使用ObjectInputStream讀?。ㄖ貥嫞ο?。 可以通過使用流的文件來實現對象的持久存儲。 如果流是網絡套接字流,則可以在另一個主機上或另一個進程中重構對象

7.3.1對象反序列化流 

對象反序列化流: ObjectInputStream

  • ObjectInputStream反序列化先前使用ObjectOutputStream編寫的原始數據和對象

7.4Properties集合

當我們需要將集合和IO流結合使用的時候我們就需要使用到Properties集合。

7.4.1介紹

是一個Map體系的集合類

Properties可以保存到流中或從流中加載

屬性列表中的每個鍵及其對應的值都是一個字符串

 由介紹我們知道這個集合的底層是個Map集合所有和Map集合存儲使用是差不多的。

7.4.2Properties作為Map集合的特有方法

Object setProperty(String key, String value) 設置集合的鍵和值,都是String類型,底層調用 Hashtable方法 put
String getProperty(String key) 使用此屬性列表中指定的鍵搜索屬性
Set<String> stringPropertyNames() 從該屬性列表中返回一個不可修改的鍵集,其中鍵及其對應的值是字符串

 7.4.3Properties和IO流相結合的方法

void load(InputStream inStream) 從輸入字節(jié)流讀取屬性列表(鍵和元素對)
void load(Reader reader) 從輸入字符流讀取屬性列表(鍵和元素對)
void store(OutputStream out, String comments) 將此屬性列表(鍵和元素對)寫入此 Properties表中,以適合于使用 load(InputStream)方法的格式寫入輸出字節(jié)流
void store(Writer writer, String comments) 將此屬性列表(鍵和元素對)寫入此 Properties表中,以適合使用 load(Reader)方法的格式寫入輸出字符流

 8、總結

以上就是我給大家總結的關于IO流的一些常用知識,如果有沒有總結到的或者總結的不好的請多多包含或者給博主指出來,博主繼續(xù)努力學習改進自己的不足。

到此這篇關于Java新手學習之IO流簡單使用的文章就介紹到這了,更多相關Java IO流的簡單使用內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 解決ResourceBundle.getBundle文件路徑問題

    解決ResourceBundle.getBundle文件路徑問題

    這篇文章主要介紹了解決ResourceBundle.getBundle文件路徑問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • java HashMap,TreeMap與LinkedHashMap的詳解

    java HashMap,TreeMap與LinkedHashMap的詳解

    這篇文章主要介紹了 java HashMap,TreeMap與LinkedHashMap的詳解的相關資料,這里提供實例代碼,幫助大家學習理解 這部分的內容,需要的朋友可以參考下
    2016-11-11
  • java使用電腦攝像頭識別二維碼

    java使用電腦攝像頭識別二維碼

    這篇文章主要為大家詳細介紹了java使用電腦攝像頭識別二維碼,從攝像頭獲取圖像,再根據圖片解析出二維碼信息,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-10-10
  • jackson設置返回null為空字符串的操作

    jackson設置返回null為空字符串的操作

    這篇文章主要介紹了jackson設置返回null為空字符串的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-09-09
  • Java讀取resources中資源文件路徑以及jar中文件無法讀取的解決

    Java讀取resources中資源文件路徑以及jar中文件無法讀取的解決

    這篇文章主要介紹了Java讀取resources中資源文件路徑以及jar中文件無法讀取的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-05-05
  • java中的三種取整函數總結

    java中的三種取整函數總結

    下面小編就為大家?guī)硪黄猨ava中的三種取整函數總結。希望對大家有所幫助。一起跟隨小編過來看看吧,祝大家游戲愉快哦
    2016-11-11
  • SpringBoot Web詳解靜態(tài)資源規(guī)則與定制化處理

    SpringBoot Web詳解靜態(tài)資源規(guī)則與定制化處理

    這篇文章主要介紹了SpringBoot web場景的靜態(tài)資源規(guī)則與定制化,文章圍繞主題展開詳細的內容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-06-06
  • springboot跨域過濾器fetch react Response to preflight request doesn‘t pass access control check問題

    springboot跨域過濾器fetch react Response to p

    這篇文章主要介紹了springboot跨域過濾器fetch react Response to preflight request doesn‘t pass access control check問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • java實現數字炸彈

    java實現數字炸彈

    這篇文章主要為大家詳細介紹了java實現數字炸彈,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-07-07
  • SpringBoot+MyBatis-Plus實現分頁功能

    SpringBoot+MyBatis-Plus實現分頁功能

    在SpringBoot項目中,結合MyBatis-Plus(簡稱MP)可以非常方便地實現分頁功能,MP為開發(fā)者提供了分頁插件PaginationInterceptor,只需簡單配置即可使用,本文給大家介紹了SpringBoot+MyBatis-Plus實現分頁功能,文中通過代碼示例給大家介紹的非常詳細,需要的朋友可以參考下
    2024-01-01

最新評論