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

Java新手學(xué)習(xí)之IO流的簡(jiǎn)單使用

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

前言

在我們平時(shí)使用圖形化界面的時(shí)候,會(huì)發(fā)現(xiàn)來(lái)建立一個(gè)文件夾或者一個(gè)文檔的時(shí)候很簡(jiǎn)單,只需要在桌面單擊鼠標(biāo)右鍵就可以了。但是,在我們寫(xiě)項(xiàng)目的時(shí)候想要把一些東西存到文件夾里面怎么辦吶?

 不可能程序運(yùn)行到需要文件夾的時(shí)候我再來(lái)到桌面或者哪里來(lái)手動(dòng)建立一個(gè)文件或者文檔吧?不要懷疑自己這樣操作是肯定不行的,那有的人就會(huì)想了那我們?cè)趺崔k吶?這不博主就來(lái)幫大家的忙了嘛,在java中有個(gè)東西叫做IO流就可以很好的解決這個(gè)問(wèn)題。什么是IO流吶?接下來(lái)就由我來(lái)帶領(lǐng)大家了解什么是IO流!

IO流

1、基本概念

IO:Java對(duì)數(shù)據(jù)的操作是通過(guò)流的方式,IO流用來(lái)處理設(shè)備之間的數(shù)據(jù)傳輸,上傳文件和下載文件,Java用于操作流的對(duì)象都在IO包中。

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

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

一個(gè)流可以理解為一個(gè)數(shù)據(jù)的序列。輸入流表示從一個(gè)源讀取數(shù)據(jù),輸出流表示向一個(gè)目標(biāo)寫(xiě)數(shù)據(jù)。Java 為 I/O 提供了強(qiáng)大的而靈活的支持,使其更廣泛地應(yīng)用到文件傳輸和網(wǎng)絡(luò)編程中。

 2、IO流分類

圖示:

 3、File

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

3.1File基本概念

File是文件和目錄路徑名的抽象表示,文件和目錄是可以通過(guò)File封裝成對(duì)象的對(duì)于File而言,其封裝的并不是一個(gè)真正存在的文件,僅僅是一個(gè)路徑名而已。它可以是存在的,也可以是不存在的。將來(lái)是要通過(guò)具體的操作把這個(gè)路徑的內(nèi)容轉(zhuǎn)換為具體存在的

3.2創(chuàng)建文本

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

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

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

3.3創(chuàng)建目錄

File中有兩個(gè)方法來(lái)創(chuàng)建文件夾:

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

 代碼創(chuàng)建一個(gè) "/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);
        // 現(xiàn)在創(chuàng)建目錄
        d.mkdirs();
    }
}

3.4判斷、讀取和刪除

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

判斷:

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

讀?。?/p>

public String getAbsolutePath() 返回此抽象路徑名的絕對(duì)路徑名字符串
public String getPath() 將此抽象路徑名轉(zhuǎn)換為路徑名字符串
public String getName() 返回由此抽象路徑名表示的文件或目錄的名稱
public String[] list() 返回此抽象路徑名表示的目錄中的文件和目錄的名稱字符串?dāng)?shù)組
public File[] listFiles() 返回此抽象路徑名表示的目錄中的文件和目錄的File對(duì)象數(shù)組

刪除:

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

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

4、字節(jié)流

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

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

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

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

子類名特點(diǎn):子類名稱都是以其父類名作為子類名的后綴

4.2字節(jié)流寫(xiě)數(shù)據(jù)

4.2.1常用字節(jié)流寫(xiě)數(shù)據(jù)的類:

void write(int b) 將指定的字節(jié)寫(xiě)入此文件輸出流 一次寫(xiě)一個(gè)字節(jié)數(shù)據(jù)
void write(byte[] b) 將 b.length字節(jié)從指定的字節(jié)數(shù)組寫(xiě)入此文件輸出流 一次寫(xiě)一個(gè)字節(jié)數(shù)組數(shù)據(jù)
void write(byte[] b, int off, int len) 將 len字節(jié)從指定的字節(jié)數(shù)組開(kāi)始,從偏移量off開(kāi)始寫(xiě)入此文件輸出流 一次寫(xiě)一個(gè)字節(jié)數(shù)組的部分?jǐn)?shù)據(jù)

 代碼:

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

4.2.2換行和追加

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

windows:\r\n

linux:\n

mac:\r

 (2)字節(jié)流寫(xiě)數(shù)據(jù)如何實(shí)現(xiàn)追加寫(xiě)入

public FileOutputStream(String name,boolean append)

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

4.3字節(jié)流讀數(shù)據(jù)

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

代碼如下:

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

5、字符流

5.1由來(lái)

字符流的由來(lái):因?yàn)閿?shù)據(jù)編碼的不同,因而有了對(duì)字符進(jìn)行高效操作的流對(duì)象,字符流本質(zhì)其實(shí)就是基于字節(jié)流讀取時(shí),去查了指定的碼表,而字節(jié)流直接讀取數(shù)據(jù)會(huì)有亂碼的問(wèn)題(讀中文會(huì)亂碼)。

字節(jié)流讀取中文字符時(shí),可能不會(huì)顯示完整的字符,那是因?yàn)橐粋€(gè)中文字符占用多個(gè)字節(jié)存儲(chǔ)。

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

5.2字符流寫(xiě)數(shù)據(jù)

字符流寫(xiě)數(shù)據(jù)常用的方法

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

刷新和關(guān)閉方法:

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

 示例代碼:

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

5.3字符流讀數(shù)據(jù)

讀數(shù)據(jù)的兩種方法

int read()一次讀一個(gè)字符數(shù)據(jù)int read(char[] cbuf)一次讀一個(gè)字符數(shù)組數(shù)據(jù)

 代碼示例:

  InputStreamReader isr = new InputStreamReader(new FileInputStream("myCharStream\\ConversionStreamDemo.java"));
 
        //int read():一次讀一個(gè)字符數(shù)據(jù)
        int ch;
        while ((ch=isr.read())!=-1) {
            System.out.print((char)ch);
        }
 
        //int read(char[] cbuf):一次讀一個(gè)字符數(shù)組數(shù)據(jù)
        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é)流:

 字符流:

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

7、特殊操作流

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

7.1標(biāo)準(zhǔn)輸入輸出流

- public static final InputStream in:標(biāo)準(zhǔn)輸入流。通常該流對(duì)應(yīng)于鍵盤(pán)輸入或由主機(jī)環(huán)境或用戶指定的另一個(gè)輸入源
- public static final PrintStream out:標(biāo)準(zhǔn)輸出流。通常該流對(duì)應(yīng)于顯示輸出或由主機(jī)環(huán)境或用戶指定的另一個(gè)輸出目標(biāo)

 7.2字節(jié)打印流

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

- 使用繼承父類的方法寫(xiě)數(shù)據(jù),查看的時(shí)候會(huì)轉(zhuǎn)碼;使用自己的特有方法寫(xiě)數(shù)據(jù),查看的數(shù)據(jù)原樣輸出

- 可以改變輸出語(yǔ)句的目的地

  ​    public static void setOut(PrintStream out):重新分配“標(biāo)準(zhǔn)”輸出流

 7.3對(duì)象序列化流和對(duì)象反序列化流

7.3.1對(duì)象序列化流

對(duì)象序列化介紹

  • 對(duì)象序列化:就是將對(duì)象保存到磁盤(pán)中,或者在網(wǎng)絡(luò)中傳輸對(duì)象
  • 這種機(jī)制就是使用一個(gè)字節(jié)序列表示一個(gè)對(duì)象,該字節(jié)序列包含:對(duì)象的類型、對(duì)象的數(shù)據(jù)和對(duì)象中存儲(chǔ)的屬性等信息
  • 字節(jié)序列寫(xiě)到文件之后,相當(dāng)于文件中持久保存了一個(gè)對(duì)象的信息
  • 反之,該字節(jié)序列還可以從文件中讀取回來(lái),重構(gòu)對(duì)象,對(duì)它進(jìn)行反序列化

對(duì)象序列化流: ObjectOutputStream

  • 將Java對(duì)象的原始數(shù)據(jù)類型和圖形寫(xiě)入OutputStream。 可以使用ObjectInputStream讀?。ㄖ貥?gòu))對(duì)象。 可以通過(guò)使用流的文件來(lái)實(shí)現(xiàn)對(duì)象的持久存儲(chǔ)。 如果流是網(wǎng)絡(luò)套接字流,則可以在另一個(gè)主機(jī)上或另一個(gè)進(jìn)程中重構(gòu)對(duì)象

7.3.1對(duì)象反序列化流 

對(duì)象反序列化流: ObjectInputStream

  • ObjectInputStream反序列化先前使用ObjectOutputStream編寫(xiě)的原始數(shù)據(jù)和對(duì)象

7.4Properties集合

當(dāng)我們需要將集合和IO流結(jié)合使用的時(shí)候我們就需要使用到Properties集合。

7.4.1介紹

是一個(gè)Map體系的集合類

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

屬性列表中的每個(gè)鍵及其對(duì)應(yīng)的值都是一個(gè)字符串

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

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

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

 7.4.3Properties和IO流相結(jié)合的方法

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

 8、總結(jié)

以上就是我給大家總結(jié)的關(guān)于IO流的一些常用知識(shí),如果有沒(méi)有總結(jié)到的或者總結(jié)的不好的請(qǐng)多多包含或者給博主指出來(lái),博主繼續(xù)努力學(xué)習(xí)改進(jìn)自己的不足。

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

相關(guān)文章

  • Spring Boot詳解配置文件的用途與用法

    Spring Boot詳解配置文件的用途與用法

    SpringBoot項(xiàng)目是一個(gè)標(biāo)準(zhǔn)的Maven項(xiàng)目,它的配置文件需要放在src/main/resources/下,其文件名必須為application,其存在兩種文件形式,分別是properties和yaml(或者yml)文件
    2022-06-06
  • Java compareTo用法詳解

    Java compareTo用法詳解

    在Java編程中,有時(shí)候我們需要對(duì)對(duì)象進(jìn)行比較和排序,為了實(shí)現(xiàn)這一目標(biāo),Java提供了一個(gè)非常有用的接口叫做Comparable,以及一個(gè)重要的方法compareTo,下面我們就來(lái)看看compareTo的具體用法吧
    2023-09-09
  • java中CopyOnWriteArrayList源碼解析

    java中CopyOnWriteArrayList源碼解析

    為了將讀取的性能發(fā)揮到極致,jdk中提供了CopyOnWriteArrayList類,下面這篇文章主要給大家介紹了關(guān)于java中CopyOnWriteArrayList源碼解析的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-02-02
  • java中基本數(shù)據(jù)類型與Object的關(guān)系說(shuō)明

    java中基本數(shù)據(jù)類型與Object的關(guān)系說(shuō)明

    這篇文章主要介紹了java基本數(shù)據(jù)類型與Object的關(guān)系說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • Java日常練習(xí)題,每天進(jìn)步一點(diǎn)點(diǎn)(27)

    Java日常練習(xí)題,每天進(jìn)步一點(diǎn)點(diǎn)(27)

    下面小編就為大家?guī)?lái)一篇Java基礎(chǔ)的幾道練習(xí)題(分享)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧,希望可以幫到你
    2021-07-07
  • 關(guān)于JVM翻越內(nèi)存管理的墻

    關(guān)于JVM翻越內(nèi)存管理的墻

    這篇文章主要介紹了JVM翻越內(nèi)存管理的墻,由虛擬機(jī)管理內(nèi)存看起來(lái)一切都很美好,但也正是因?yàn)榘芽刂苾?nèi)存的權(quán)力交給了Java虛擬機(jī),一旦出現(xiàn)內(nèi)存泄漏和溢出方面的問(wèn)題,就不得不從Java虛擬機(jī)角度上去排查問(wèn)題,本文給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2022-05-05
  • 關(guān)于Spring總結(jié)(必看篇)

    關(guān)于Spring總結(jié)(必看篇)

    下面小編就為大家?guī)?lái)一篇關(guān)于Spring總結(jié)(必看篇)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-08-08
  • springboot項(xiàng)目配置context path失效的問(wèn)題解決

    springboot項(xiàng)目配置context path失效的問(wèn)題解決

    本文主要介紹了springboot項(xiàng)目配置context path失效的問(wèn)題解決,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04
  • 一篇文章帶你解決 IDEA 每次新建項(xiàng)目 maven home directory 總是改變的問(wèn)題

    一篇文章帶你解決 IDEA 每次新建項(xiàng)目 maven home directory 總是改變的問(wèn)題

    這篇文章主要介紹了一篇文章帶你解決 IDEA 每次新建項(xiàng)目 maven home directory 總是改變的問(wèn)題,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-09-09
  • 線程池調(diào)用kafka發(fā)送消息產(chǎn)生的內(nèi)存泄漏問(wèn)題排查解決

    線程池調(diào)用kafka發(fā)送消息產(chǎn)生的內(nèi)存泄漏問(wèn)題排查解決

    這篇文章主要為大家介紹了線程池調(diào)用kafka發(fā)送消息產(chǎn)生的內(nèi)存泄漏問(wèn)題排查解決,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-08-08

最新評(píng)論

蓬安县| 武平县| 四子王旗| 洛隆县| 曲沃县| 潼关县| 天柱县| 道孚县| 乳山市| 嵊泗县| 北川| 秦安县| 临高县| 鄂尔多斯市| 河间市| 拜城县| 恭城| 温宿县| 富宁县| 旺苍县| 遂平县| 上虞市| 邳州市| 永济市| 泽普县| 岳阳市| 梁山县| 连城县| 云和县| 陵川县| 韩城市| 东乌珠穆沁旗| 临沭县| 福海县| 岳西县| 新津县| 辛集市| 米易县| 金平| 闸北区| 黔江区|