成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

Java IO學習筆記二

ideaa / 1483人閱讀

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

Java IO學習筆記二 流的概念

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

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

字節(jié)流和字符流

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

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

操作流程

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

使用File類打開一個文件

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

進行讀/寫操作

關閉輸入/輸出

字節(jié)流

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

FileOutputStream

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

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

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

構造函數(shù)

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

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

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

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

常用的方法

close() 關閉文件輸出流

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

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

void write(int b) 將指定字節(jié)寫入此文件輸出流,這個是按照ascii碼寫入文件的,并不是直接寫入的是整數(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);   //將中文字符串的第一個字寫入,這里一個中文占了三個字節(jié)
                String age = "chenjiabing
";  
                outputStream.write(age.getBytes());
                outputStream.write(data);  //這里的寫入的acsii碼中的(


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

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

            }
        }

    }
}

當然也可以一個一個的字節(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);//如果文件不存在會自動創(chuàng)建
        String str="Hello World";
        byte[] b=str.getBytes();
        for(int i=0;i
FileInputStream

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

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

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

構造函數(shù)

FileInputStream(File file) 通過打開一個到實際文件的連接來創(chuàng)建一個 FileInputStream,該文件通過文件系統(tǒng)中的File對file指定。

FileInputStream(String name) 通過打開一個到實際文件的連接來創(chuàng)建一個 FileInputStream,該文件通過文件系統(tǒng)中的路徑名 name 指定。

常用方法

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

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

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

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

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

實例

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

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返回文件的大小,這樣就不會浪內(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();
                }

            }
        }

一個一個的讀文件

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;   //下標
                byte[] bytes=new byte[(int)file.length()];  //創(chuàng)建數(shù)組
                while((len=inputStream.read())!=-1)   //判斷是否讀取到文件的末尾
                {
                    bytes[i]=(byte)len;   //將讀到的整形數(shù)據(jù)轉(zhuǎn)換成bytes類型的,存儲在數(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返回文件的大小,這樣就不會浪內(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();
                }

            }
        }
字符流

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

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

字符輸出流 FileWriter

用來寫入字符文件的便捷類。此類的構造方法假定默認字符編碼和默認字節(jié)緩沖區(qū)大小都是可接受的。

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

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

構造函數(shù)

FileWriter(File file) 根據(jù)給定的 File 對象構造一個 FileWriter 對象。

FileWriter(File file,boolean append) 追加

FileWriter(String fileName) 根據(jù)給定的文件名構造一個 FileWriter 對象。

FileWriter(String fileName, boolean append) 根據(jù)給定的文件名以及指示是否附加寫入數(shù)據(jù)的 boolean 值來構造 FileWriter 對象。

常用方法

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

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

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

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

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

實例
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);   //寫入字符串
            fileWriter.write(name);   //寫入中文字符串,這里直接寫入不用轉(zhuǎn)換成byte數(shù)組了
            fileWriter.write(data);  //寫入單個字符
        }catch (IOException e)
        {
            e.printStackTrace();
        }finally {
            if(fileWriter!=null)
            {

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

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

字符輸入流 FileReader

用來讀取字符文件的便捷類。此類的構造方法假定默認字符編碼和默認字節(jié)緩沖區(qū)大小都是適當?shù)?/p>

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

構造函數(shù)

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

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

常用函數(shù)

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

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

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

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

long skip(long n) 跳過字符。

實例

用字符數(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ù)文件的大小申請數(shù)組大小,不浪費
            try {
                int len = fileReader.read(c);   //將文件的內(nèi)容讀取到字符數(shù)組中
                for (int i = 0; i < c.length; i++) {     
                    System.out.println(c[i]);    //將一個一個字符輸出
                }
            } catch (IOException e) {
                e.printStackTrace();
            }

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

使用ready控制是否讀到文件末尾,當然也可以使用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ù)文件的大小申請數(shù)組大小,不浪費
            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

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

轉(zhuǎn)載請注明本文地址:http://m.hztianpu.com/yun/67099.html

相關文章

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

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

    suemi 評論0 收藏0
  • Spring框架學習筆記):官方文檔Core Technologies - Part 1

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

    cnio 評論0 收藏0
  • JAVA學習筆記036-第一個簡單的Mybatis程序(代碼經(jīng)驗證)

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

    itvincent 評論0 收藏0
  • 多線程學習筆記(2):多線程基礎

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

    HelKyle 評論0 收藏0
  • Json-path學習筆記<>

    摘要:該篇主要以代碼示例為主,因為上不去,看不到這個官方文檔和。因為接下來的底層默認使用的就是。和功能是一致的。區(qū)別是不會拋出異常,而會拋出異常。而解析輸入的文本內(nèi)容依據(jù)默認的解析文本的模式。 Json-smart 該篇主要以代碼示例為主,因為google上不去,看不到Json-smart這個官方文檔和API。故只例舉一些代碼示例。因為接下來的Json-path底層默認使用的就是JsonSm...

    Soarkey 評論0 收藏0

發(fā)表評論

0條評論

閱讀需要支付1元查看
<