国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專(zhuān)欄INFORMATION COLUMN

Java IO學(xué)習(xí)筆記二

ideaa / 1437人閱讀

摘要:學(xué)習(xí)筆記二流的概念在程序中所有的數(shù)據(jù)都是以流的方式進(jìn)行傳輸或保存的,程序需要數(shù)據(jù)的時(shí)候要使用輸入流讀取數(shù)據(jù),而當(dāng)程序需要將一些數(shù)據(jù)保存起來(lái)的時(shí)候,就要使用輸出流完成。主要功能是向文件中寫(xiě)入內(nèi)容構(gòu)造函數(shù)根據(jù)給定的對(duì)象構(gòu)造一個(gè)對(duì)象。

Java IO學(xué)習(xí)筆記二 流的概念

在程序中所有的數(shù)據(jù)都是以流的方式進(jìn)行傳輸或保存的,程序需要數(shù)據(jù)的時(shí)候要使用輸入流讀取數(shù)據(jù),而當(dāng)程序需要將一些數(shù)據(jù)保存起來(lái)的時(shí)候,就要使用輸出流完成。

程序中的輸入輸出都是以流的形式保存的,流中保存的實(shí)際上全都是字節(jié)文件。

字節(jié)流和字符流

實(shí)際上字節(jié)流在操作時(shí)本身不會(huì)用到緩沖區(qū)(內(nèi)存),是文件本身直接操作的,而字符流在操作時(shí)使用了緩沖區(qū),通過(guò)緩沖區(qū)再操作文件

在java.io包中操作文件內(nèi)容的主要有兩大類(lèi):字節(jié)流、字符流,兩類(lèi)都分為輸入和輸出操作。在字節(jié)流中輸出數(shù)據(jù)主要是使用OutputStream完成,輸入使的是InputStream,在字符流中輸出主要是使用Writer類(lèi)完成,輸入流主要使用Reader類(lèi)完成。(這四個(gè)都是抽象類(lèi))

操作流程

在Java中IO操作也是有相應(yīng)步驟的,以文件操作為例,主要的操作流程如下:

使用File類(lèi)打開(kāi)一個(gè)文件

通過(guò)字節(jié)流或字符流的子類(lèi),指定輸出的位置

進(jìn)行讀/寫(xiě)操作

關(guān)閉輸入/輸出

字節(jié)流

字節(jié)流主要是操作byte類(lèi)型數(shù)據(jù),以byte數(shù)組為準(zhǔn),主要操作類(lèi)就是OutputStreamInputStream

FileOutputStream

文件輸出流是用于將數(shù)據(jù)寫(xiě)入 File 或 FileDescriptor 的輸出流。文件是否可用或能否可以被創(chuàng)建取決于基礎(chǔ)平臺(tái)。特別是某些平臺(tái)一次只允許一個(gè) FileOutputStream(或其他文件寫(xiě)入對(duì)象)打開(kāi)文件進(jìn)行寫(xiě)入。在這種情況下,如果所涉及的文件已經(jīng)打開(kāi),則此類(lèi)中的構(gòu)造方法將失敗。

FileOutputStream 用于寫(xiě)入諸如圖像數(shù)據(jù)之類(lèi)的原始字節(jié)的流。要寫(xiě)入字符流,請(qǐng)考慮使用 FileWriter。

主要的功能就是用來(lái)向文件中寫(xiě)入內(nèi)容的

構(gòu)造函數(shù)

FileOutputStream(File file) 創(chuàng)建一個(gè)向指定 File 對(duì)象表示的文件中寫(xiě)入數(shù)據(jù)的文件輸出流。

FileOutputStream(File file, boolean append) 如果在文件后面追加內(nèi)容,如果append為true則追加內(nèi)容

FileOutputStream(String name) 創(chuàng)建一個(gè)向具有指定名稱(chēng)的文件中寫(xiě)入數(shù)據(jù)的輸出文件流。

FileOutputStream(String name, boolean append) 創(chuàng)建一個(gè)向具有指定 name 的文件中寫(xiě)入數(shù)據(jù)的輸出文件流。

常用的方法

close() 關(guān)閉文件輸出流

void write(byte[] b) 將 b.length 個(gè)字節(jié)從指定 byte 數(shù)組寫(xiě)入此文件輸出流中。

void write(byte[] b, int off, int len) 將指定 byte 數(shù)組中從偏移量 off 開(kāi)始的 len 個(gè)字節(jié)寫(xiě)入此文件輸出流,這里需要注意的是中文所占字節(jié)數(shù)為3,英文所占字節(jié)數(shù)為1

void write(int b) 將指定字節(jié)寫(xiě)入此文件輸出流,這個(gè)是按照ascii碼寫(xiě)入文件的,并不是直接寫(xiě)入的是整數(shù)

實(shí)例
package File_demo;

import java.io.*;

public class demo {
    public static void main(String[] args) {
        FileOutputStream outputStream = null;
        File file = new File("/tmp" + File.separator + "test.txt");
        try {
            outputStream = new FileOutputStream(file);
            try {
                int data = 48;
                String name = "陳加兵
";  //使用
換行
                byte[] bytes = name.getBytes();   //將字符串轉(zhuǎn)換成byte數(shù)組
                outputStream.write(bytes, 0, 3);   //將中文字符串的第一個(gè)字寫(xiě)入,這里一個(gè)中文占了三個(gè)字節(jié)
                String age = "chenjiabing
";  
                outputStream.write(age.getBytes());
                outputStream.write(data);  //這里的寫(xiě)入的acsii碼中的(


            } catch (IOException e) {
                e.printStackTrace();
            }

        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } finally {
            if (outputStream != null) {
                try {
                    outputStream.close();  //關(guān)閉文件流
                } catch (IOException e) {
                    e.printStackTrace();
                }

            }
        }

    }
}

當(dāng)然也可以一個(gè)一個(gè)的字節(jié)輸出

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;

public class Test11 {
    public static void main(String[] args) throws IOException {
        File f = new File("d:" + File.separator+"test.txt");
        OutputStream out=new FileOutputStream(f);//如果文件不存在會(huì)自動(dòng)創(chuàng)建
        String str="Hello World";
        byte[] b=str.getBytes();
        for(int i=0;i
FileInputStream

FileInputStream 從文件系統(tǒng)中的某個(gè)文件中獲得輸入字節(jié)。哪些文件可用取決于主機(jī)環(huán)境。

FileInputStream 用于讀取諸如圖像數(shù)據(jù)之類(lèi)的原始字節(jié)流。要讀取字符流,請(qǐng)考慮使用 FileReader。

主要的功能是讀取文件中的內(nèi)容

構(gòu)造函數(shù)

FileInputStream(File file) 通過(guò)打開(kāi)一個(gè)到實(shí)際文件的連接來(lái)創(chuàng)建一個(gè) FileInputStream,該文件通過(guò)文件系統(tǒng)中的File對(duì)file指定。

FileInputStream(String name) 通過(guò)打開(kāi)一個(gè)到實(shí)際文件的連接來(lái)創(chuàng)建一個(gè) FileInputStream,該文件通過(guò)文件系統(tǒng)中的路徑名 name 指定。

常用方法

int read() 從輸入流中讀取數(shù)據(jù)字節(jié),如果到達(dá)文件的末尾就返回-1

int read(byte[] b) 將文件中的內(nèi)容讀取到byte數(shù)組中,如果到達(dá)文件末尾返回-1

int read(byte[] b, int off, int len) 從此輸入流中將最多 len 個(gè)字節(jié)的數(shù)據(jù)讀入一個(gè) byte 數(shù)組中,這個(gè)用于截取字節(jié)流,注意這里中文是占三個(gè)字節(jié)

long skip(long n) 從輸入流中跳過(guò)并丟棄 n 個(gè)字節(jié)的數(shù)據(jù),一旦跳過(guò)字節(jié)那么就從跳過(guò)的字節(jié)的后面開(kāi)始讀取

int available() 返回的數(shù)據(jù)是輸入流中的字節(jié)數(shù),如果沒(méi)有字節(jié)就返回0,因此可以用這個(gè)函數(shù)判斷文件中是否還有內(nèi)容

實(shí)例

針對(duì)知道的文件的大小然后創(chuàng)建一個(gè)數(shù)組存儲(chǔ),之后將數(shù)組轉(zhuǎn)換成字符串,當(dāng)然我們也可以一個(gè)一個(gè)的讀取

File file=new File("/tmp"+File.separator+"test.txt");
        FileInputStream inputStream=null;
        try {
            inputStream=new FileInputStream(file);

            try {
                byte[] bytes=new byte[(int)file.length()];  //file.length返回文件的大小,這樣就不會(huì)浪內(nèi)存空間了
                int flag=inputStream.read(bytes);    //將文件的內(nèi)容讀入到數(shù)組中
                System.out.println(new String(bytes));    //將bytes數(shù)組轉(zhuǎn)換成字符串輸出
                System.out.println(flag);
            }catch (IOException e)
            {
                e.printStackTrace();
            }
        }catch (FileNotFoundException e)
        {
            e.printStackTrace();
        }finally {
            if(inputStream!=null)
            {
                try {
                    inputStream.close();
                }catch (IOException e)
                {
                    e.printStackTrace();
                }

            }
        }

一個(gè)一個(gè)的讀文件

File file=new File("/tmp"+File.separator+"test.txt");
        FileInputStream inputStream=null;
        try {
            inputStream=new FileInputStream(file);

            try {
                int len=0;  //讀取的字節(jié)
                int i=0;   //下標(biāo)
                byte[] bytes=new byte[(int)file.length()];  //創(chuàng)建數(shù)組
                while((len=inputStream.read())!=-1)   //判斷是否讀取到文件的末尾
                {
                    bytes[i]=(byte)len;   //將讀到的整形數(shù)據(jù)轉(zhuǎn)換成bytes類(lèi)型的,存儲(chǔ)在數(shù)組中
                    i++;
                }
                System.out.println(new String(bytes));   //轉(zhuǎn)換成字符串

            }catch (IOException e)
            {
                e.printStackTrace();
            }
        }catch (FileNotFoundException e)
        {
            e.printStackTrace();
        }finally {
            if(inputStream!=null)
            {
                try {
                    inputStream.close();
                }catch (IOException e)
                {
                    e.printStackTrace();
                }

            }
        }

使用available控制結(jié)束

File file = new File("/tmp" + File.separator + "test.txt");
        FileInputStream inputStream = null;
        try {
            inputStream = new FileInputStream(file);

            try {

                byte[] bytes = new byte[(int) file.length()];  //file.length返回文件的大小,這樣就不會(huì)浪內(nèi)存空間了
                int i = 0;
                while (inputStream.available() != 0) {
                    try {
                        bytes[i] = (byte) inputStream.read();
                        i++;
                    } catch (IOException e) {
                        e.printStackTrace();
                    }


                }
                System.out.println(new String(bytes));


            } catch (IOException e) {
                e.printStackTrace();
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } finally {
            if (inputStream != null) {
                try {
                    inputStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }

            }
        }
字符流

在程序中一個(gè)字符等于兩個(gè)字節(jié),那么java提供了Reader、Writer兩個(gè)專(zhuān)門(mén)操作字符流的類(lèi)。

前面已經(jīng)說(shuō)過(guò)字符流要用到緩沖區(qū),因此在關(guān)閉字符流的時(shí)候一定要刷新緩沖區(qū),清空緩沖區(qū)中的內(nèi)容

字符輸出流 FileWriter

用來(lái)寫(xiě)入字符文件的便捷類(lèi)。此類(lèi)的構(gòu)造方法假定默認(rèn)字符編碼和默認(rèn)字節(jié)緩沖區(qū)大小都是可接受的。

FileWriter 用于寫(xiě)入字符流。要寫(xiě)入原始字節(jié)流,請(qǐng)考慮使用 FileOutputStream

主要功能是向文件中寫(xiě)入內(nèi)容

構(gòu)造函數(shù)

FileWriter(File file) 根據(jù)給定的 File 對(duì)象構(gòu)造一個(gè) FileWriter 對(duì)象。

FileWriter(File file,boolean append) 追加

FileWriter(String fileName) 根據(jù)給定的文件名構(gòu)造一個(gè) FileWriter 對(duì)象。

FileWriter(String fileName, boolean append) 根據(jù)給定的文件名以及指示是否附加寫(xiě)入數(shù)據(jù)的 boolean 值來(lái)構(gòu)造 FileWriter 對(duì)象。

常用方法

write(String str) 將字符寫(xiě)入文件

write(String str,int offest,int len) 截取字符串部分內(nèi)容寫(xiě)入文件

write(int c) 寫(xiě)入單個(gè)字符,并不是整數(shù)

close() 關(guān)閉流,在關(guān)閉之前必須刷新緩沖區(qū)

flush() 刷新緩沖區(qū)

實(shí)例
File file=new File("/tmp"+File.separator+"test"+File.separator+"test.txt");
        File f1=new File("/tmp"+File.separator+"test");
        if(!f1.exists())
        {
            f1.mkdir();
            System.out.println("文件創(chuàng)建成功");
        }
        FileWriter fileWriter=null;

        try {
            fileWriter=new FileWriter(file);
            String str="hello chenjiabing
";
            String name="陳加兵";
            int data=48;
            fileWriter.write(str);   //寫(xiě)入字符串
            fileWriter.write(name);   //寫(xiě)入中文字符串,這里直接寫(xiě)入不用轉(zhuǎn)換成byte數(shù)組了
            fileWriter.write(data);  //寫(xiě)入單個(gè)字符
        }catch (IOException e)
        {
            e.printStackTrace();
        }finally {
            if(fileWriter!=null)
            {

                try {
                    fileWriter.flush();  //刷新緩沖區(qū)
                    fileWriter.close();  //關(guān)閉字符流
                }catch (IOException e)
                {
                    e.printStackTrace();
                }
            }
        }

注意: 這里字符流如果不關(guān)閉的話,那么就會(huì)就會(huì)寫(xiě)入文件失敗,文件中沒(méi)有內(nèi)容,但是如果只有flush而沒(méi)有close文件還是會(huì)寫(xiě)入成功的

字符輸入流 FileReader

用來(lái)讀取字符文件的便捷類(lèi)。此類(lèi)的構(gòu)造方法假定默認(rèn)字符編碼和默認(rèn)字節(jié)緩沖區(qū)大小都是適當(dāng)?shù)?/p>

主要的功能是讀取文件內(nèi)容

構(gòu)造函數(shù)

FileReader(File file) 在給定從中讀取數(shù)據(jù)的 File 的情況下創(chuàng)建一個(gè)新 FileReader

FileReader(String fileName) 在給定從中讀取數(shù)據(jù)的文件名的情況下創(chuàng)建一個(gè)新 FileReader

常用函數(shù)

int read(char[] cbuf) 將字符讀入數(shù)組。

int read() 讀取單個(gè)字符,之后使用char類(lèi)型強(qiáng)制轉(zhuǎn)換成字符就行

read(char[] cbuf, int off, int len) 將字符讀入數(shù)組的某一部分。

boolean ready() 判斷是否準(zhǔn)備讀取此流,如果讀到文件末尾那么就返回false

long skip(long n) 跳過(guò)字符。

實(shí)例

用字符數(shù)組讀取

File file = new File("/tmp" + File.separator + "test" + File.separator + "test.txt");
        FileReader fileReader = null;
        try {
            fileReader = new FileReader(file);
            char[] c = new char[(int) file.length()];  //根據(jù)文件的大小申請(qǐng)數(shù)組大小,不浪費(fèi)
            try {
                int len = fileReader.read(c);   //將文件的內(nèi)容讀取到字符數(shù)組中
                for (int i = 0; i < c.length; i++) {     
                    System.out.println(c[i]);    //將一個(gè)一個(gè)字符輸出
                }
            } catch (IOException e) {
                e.printStackTrace();
            }

        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } finally {
            if (fileReader != null) {
                try {
                    fileReader.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }

使用ready控制是否讀到文件末尾,當(dāng)然也可以使用int read()==-1判斷

File file = new File("/tmp" + File.separator + "test" + File.separator + "test.txt");
        FileReader fileReader = null;
        try {
            fileReader = new FileReader(file);
            char[] c = new char[(int) file.length()];  //根據(jù)文件的大小申請(qǐng)數(shù)組大小,不浪費(fèi)
            try {
                while(fileReader.ready())    //判斷是否讀到文件末尾
                {
                    System.out.println((char)fileReader.read());   //轉(zhuǎn)換成字符
                }
            } catch (IOException e) {
                e.printStackTrace();
            }

        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } finally {
            if (fileReader != null) {
                try {
                    fileReader.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
參考文章

http://www.cnblogs.com/lich/archive/2011/12/11/2283700.html

http://www.cnblogs.com/absfree/p/5415092.html

http://blog.csdn.net/zxman660/article/details/7875799

http://blog.csdn.net/cynhafa/article/details/6882061

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/67099.html

相關(guān)文章

  • Java學(xué)習(xí)筆記5-方法、流(Stream)、文件(File)和IO

    摘要:是方法返回值的數(shù)據(jù)類(lèi)型。方法名和參數(shù)表共同構(gòu)成方法簽名。構(gòu)造方法和它所在類(lèi)的名字相同,但構(gòu)造方法沒(méi)有返回值。輸入流表示從一個(gè)源讀取數(shù)據(jù),輸出流表示向一個(gè)目標(biāo)寫(xiě)數(shù)據(jù)。下圖是一個(gè)描述輸入流和輸出流的類(lèi)層次圖。有多種構(gòu)造方法可用來(lái)創(chuàng)建對(duì)象。 我們經(jīng)常使用到 System.out.println(),那么它是什么呢? 一、系統(tǒng)方法 我們經(jīng)常使用到 System.out.println(),那么...

    suemi 評(píng)論0 收藏0
  • Spring框架學(xué)習(xí)筆記):官方文檔Core Technologies - Part 1

    摘要:首先介紹系列文章內(nèi)容及官方文檔情況。官方文檔中的容器及介紹的容器主要由如下兩個(gè)包構(gòu)成以及。這一接口提供了配置機(jī)制以及一些基本的功能。該類(lèi)以方式描述組成應(yīng)用的對(duì)象以及對(duì)象間依賴關(guān)系。在文件中,使用對(duì)相關(guān)元素進(jìn)行標(biāo)注,在下一級(jí)使用標(biāo)簽。 首先介紹系列文章內(nèi)容及Spring Framework官方文檔情況。 在這一系列學(xué)習(xí)中,我閱讀的主要資源是5.1.2 Reference Doc.,以及論...

    cnio 評(píng)論0 收藏0
  • JAVA學(xué)習(xí)筆記036-第一個(gè)簡(jiǎn)單的Mybatis程序(代碼經(jīng)驗(yàn)證)

    摘要:目標(biāo)創(chuàng)建一個(gè)簡(jiǎn)單的框架的程序,實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)的讀取操作。的核心配置文件核心配置文件,配置數(shù)據(jù)庫(kù)連接信息事物等每一個(gè)都需要在核心配置文件中注冊(cè)工具類(lèi)獲取第一步獲取對(duì)象既然有了,顧名思義,我們可以從中獲得的實(shí)例。 ...

    itvincent 評(píng)論0 收藏0
  • 多線程學(xué)習(xí)筆記(2):多線程基礎(chǔ)

    摘要:和方法用來(lái)設(shè)置線程是否成為守護(hù)線程和判斷線程是否是守護(hù)線程。守護(hù)線程依賴于創(chuàng)建它的線程,隨它的消亡而消亡。使用提供的方法,提醒線程終止,但是否真正終止由線程自己決定。參考實(shí)戰(zhàn)高并發(fā)程序設(shè)計(jì)多線程干貨系列一多線程基礎(chǔ) 一、如何創(chuàng)建多線程 1、繼承Thread類(lèi) public class MyThread extends Thread { @Override public ...

    HelKyle 評(píng)論0 收藏0
  • Json-path學(xué)習(xí)筆記<>

    摘要:該篇主要以代碼示例為主,因?yàn)樯喜蝗ィ床坏竭@個(gè)官方文檔和。因?yàn)榻酉聛?lái)的底層默認(rèn)使用的就是。和功能是一致的。區(qū)別是不會(huì)拋出異常,而會(huì)拋出異常。而解析輸入的文本內(nèi)容依據(jù)默認(rèn)的解析文本的模式。 Json-smart 該篇主要以代碼示例為主,因?yàn)間oogle上不去,看不到Json-smart這個(gè)官方文檔和API。故只例舉一些代碼示例。因?yàn)榻酉聛?lái)的Json-path底層默認(rèn)使用的就是JsonSm...

    Soarkey 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<