java文件io,java文件io流原理

本文目錄一覽:

java的幾種IO流讀取文件方式

一、超類:

字節流: InputStream(讀入流) OutputStream(寫出流)

字符流:    Reader(字符 讀入流)    Writer (字符寫出流)

二、文件操作流

字節流: FileInputStream  ,FileOutputStream

字符流: FileReader, FileWriter(用法與字節流基本相同,不寫)

//1.指定要讀 的文件目錄及名稱

File file =new File(“文件路徑”);

//2.創建文件讀入流對象

FileInputStream fis =new FileInputStream(file);

//3.定義結束標誌,可用字節數組讀取

int i =0 ;

while((i = fis.read())!=-1){

//i 就是從文件中讀取的字節,讀完後返回-1

}

//4.關閉流

fis.close();

//5.處理異常

//1.指定要寫到的文件目錄及名稱

File file =new File(“文件路徑”);

//2.創建文件讀入流對象

FileOutputStream fos =new FileOutputStream(file);

//3.定義結束標誌

fos.write(要寫出的字節或者字節數組);

//4.刷新和關閉流

fos.flush();

fos.close();

//5.處理異常

三、緩衝流:

字節緩衝流: BufferedInputStream,BufferedOutputStream

字符緩衝流:BufferedReader ,BufferedWriter

緩衝流是對流的操作的功能的加強,提高了數據的讀寫效率。既然緩衝流是對流的功能和讀寫效率的加強和提高,所以在創建緩衝流的對象時應該要傳入要加強的流對象。

//1.指定要讀 的文件目錄及名稱

File file =new File(“文件路徑”);

//2.創建文件讀入流對象

FileInputStream fis =new FileInputStream(file);

//3.創建緩衝流對象加強fis功能

BufferedInputStream bis =new BufferedInputStream(fis);

//4.定義結束標誌,可用字節數組讀取

int i =0 ;

while((i = bis.read())!=-1){

//i 就是從文件中讀取的字節,讀完後返回-1

}

//5.關閉流

bis.close();

//6.處理異常

//1.指定要寫到的文件目錄及名稱

File file =new File(“文件路徑”);

//2.創建文件讀入流對象

FileOutputStream fos =new FileOutputStream(file);

//3.創建緩衝流對象加強fos功能

BufferedOutputStream bos=new BufferedOutputStream(fos);

//4.向流中寫入數據

bos.write(要寫出的字節或者字節數組);

//5.刷新和關閉流

bos.flush();

bos.close();

//6.處理異常

四、對象流

ObjectInputStream ,ObjectOutputStream

不同於以上兩種類型的流這裡只能用字節對對象進行操作原因可以看上篇的編碼表比照原理

ObjectOutputStream對象的序列化:

將java程序中的對象寫到本地磁盤裡用ObjectOutputStream

eg:將Person類的對象序列化到磁盤

創建Person類

注1:此類要實現Serializable接口,此接口為標誌性接口

注2:此類要有無參的構造函數

注3:一旦序列化此類不能再修改

class Person implements Serializable{

public Person(){}

}

2.創建對象流對象

註:要增強功能可以將傳入文件緩衝流

ObjectOutputStream oos =new ObjectOutputStream(

new FileOutputStream(new File(“文件路徑”)));

3.寫入對象 ,一般會將對象用集合存儲起來然後直接將集合寫入文件

ListPerson list =new ArrayList();

list.add(new Person());

…(可以添加多個)

oos.writeObject(list);

4.關閉流,處理異常

oos.flush();

oos.close();

五、轉換流:

這類流是用於將字符轉換為字節輸入輸出,用於操作字符文件,屬於字符流的子類,所以後綴為reader,writer;前綴inputstream,outputstream;

注 :要傳入字節流作為參賽

InputStreamReader: 字符轉換輸出流

OutputStreamWriter:字符轉換輸入流

//1.獲取鍵盤輸入的字節流對象

inInputStream in =Stream.in;

/*2.用轉換流將字節流對象轉換為字符流對象,方便調用字符緩衝流的readeLine()方法*/

InputStreamReader isr =new InputStreamReader(in);

/*5.創建字符轉換輸出流對象osw,方便把輸入的字符流轉換為字節輸出到本地文件。*/

OutputStreamWriter osw =new OutputStreamWriter(new

FileOutputStream(new File(“文件名”)));

/*3.現在isr是字符流,可以作為參數傳入字符緩衝流中*/

BufferedReader br =new BufferedReader(isr);

/*4.可以調用字符緩衝流br的readLine()方法度一行輸入文本*/

String line =null;

while((line =br.readLine()){

osw.write(line);//osw是字符流對象,可以直接操作字符串

}

註:InputStreamReader isr =new InputStreamReader(new “各種類型的字節輸入流都行即是:後綴為InputStream就行”);

OutputStreamWriter osw =new OutputStreamWriter(new

“後綴為OutputStream就行”);

六、區別記憶

1.對象流是可以讀寫幾乎所有類型的只要是對象就行,而字節字符流,只能讀寫單個字節字符或者字節字符數組,以上沒有讀寫字節字符數組的;注意對象流只有字節流!

2.字符和字節循環讀入的結束條件int i=0; (i =fis.read())!=-1

用字符數組複製文件(fr 讀入流 ,fw寫出流),字節流也是相同的用法

int i = 0;  char[] c = new char[1024];

while((i = fr.reade()) !=-1)){

fw.write(c,0,i);

}

123456

3.對象流裡面套緩衝流的情景:

new ObjectInputStream(new BufferedInputStream(new FileInputStream(new File(“文件路徑”))));

4.記憶流及其功能的方法:

前綴表示功能,後綴表示流的類型;

比如說FileInputStream  前綴:File,表示操作的磁盤,後綴:intputstream,表示是字節輸入流。

同理 FileReader:表示操作文件的字符流

ObjectInputStream :操作對象的字節輸入流

5.拓展:獲取鍵盤輸入的字符的緩衝流的寫法:

new BufferedReader(new InputStreamReader(System.in)));

將字節以字符形式輸出到控制台的字符緩衝流的寫法:

new BufferedWriter( new OutputStreamWriter(System.out))

java中怎麼用io流讀寫文件

import java.io.BufferedReader;

import java.io.BufferedWriter;

import java.io.FileReader;

import java.io.FileWriter;

import java.io.IOException;

public class Test14 {

    public static void main(String[] args) throws IOException {

        String fPath = “C:/test.txt”;

        // 讀

        BufferedReader br = new BufferedReader(new FileReader(fPath));

        System.out.println(br.readLine());

        br.close();// // 使用後記得關閉

        // 寫

        BufferedWriter bw = new BufferedWriter(new FileWriter(fPath));

        bw.write(“寫一段話到文件里”);

        bw.flush();

        bw.close();// 使用後記得關閉

    }

}

同學們知道Java中的IO是指什麼?

一般指文件相關的操作。在Java中,使用文件流進行編碼時,需要引入對應的JAR包,而其中最主要的類,像File、FileInputStream、FileOutputStream等等,大多都封裝在IO這個包裡面。所以Java中,說到IO相關的操作,一般情況下都會認為是文件相關的操作。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/275796.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-17 16:06
下一篇 2024-12-17 16:06

相關推薦

發表回復

登錄後才能評論