java 文件讀寫


---恢復內容開始---

一.流:一維單方向

1. 一維:即只需要給出一個參數就可以確定在流中的位置

2. 單方向:只能從一個方向流向另一個方向:要么是讀,要么是寫,不能在同一個流中讀寫並行。

那么想要既讀又寫,那么就需要開兩個流。

例如:System.out.println()中的out就是一個可以用來做輸出的流。

3. InputStream:從inputstream中按字節為單位讀取,標記,作為返回值等。

1)int read() 、返回獨到的文件的位置,若讀到了末尾,返回-1;

   read(byte[], int off, int len)、

   read(byte b[])

2)int available()

3)mark()、reset()......

注:所有的read函數都是按照字節為單位進行讀入的。

4. OutoutStream:

int write()

write(byte[])

write(byte[], int off, int len)

write的性質和read類似

二.文件流:FileInputStream and FileOutputStream

但凡是read或是write函數都是只能按字節為單位進行讀取

1 //聲明
2 FileOutputStream out = new FileOutputStream(filepath);
3 out.write(something);
4 out.close();
FileOutputStream

三.過濾器流:

 1. 如果想要從文件中讀取一個int, 或是String 或是其他, 而不只是byte的二進制數據,那么就要用到過濾器流

 2. 在已有的文件流的基礎上一層層的增加過濾器,我們可以利用這些過濾器實現那些我們可能需要的功能.

 

 1 //通過DateOutputStream可以實現完成基礎數據類型的寫操作
 2 //再將其存入到一層緩沖區流中
 3 //最后通過文件流實現輸出
 4 DateOutputStream out = new DataOutputStream(
 5                        new BufferedOutputStream(
 6                        new FileOutputStream(filepath)));
 7 int i = 0x666666;
 8 out.writeInt(i);
 9 out.close();
10 //同理,我們可以實現一個基礎數據類型的讀入流:
11 //其實現原理正好為輸出流的反向過程
12 DataInputStream in = new DataInputStream(
13                      new BufferedInputStream(
14                      new FileInputStream(filepath)));
15 int j = in.readInt();
16 System.out.println(j);
View Code

 

3. 文本輸入輸出:Reader and Writer(處理unicode 字符)

 1 //我們使用writer實現文本的輸出
 2 //通過一個BufferedWriter實現了一個緩沖區(可有可無)
 3 //OutputStreamWriter是Stream和Writer之間的橋梁,幫助了我們實現了文本到二進制的轉換
 4 //最后基於一個實際的文件輸出流FileOutputStream,實現寫功能
 5 PrintWriter pw = new PrintWriter(
 6                  new BufferedWriter(
 7                  new OutputStreamWriter(
 8                  new FileOutputStream("try.txt"))));            
 9 String txt = "Hello World!";
10 pw.println(txt);
11 pw.close();
12 //文本讀出
13 //原理類似,過程相反
14 BufferedReader in = new BufferedReader(
15                     new InputStreamReader(
16                     new FileInputStream(filepath)));
17 //
18 String line;
19 while((line = in.readLine()) != null)
20     System.out.println(line);
View Code

 四.編碼問題:

1. 當從文件中讀入數據並輸出后,發現全是亂碼,那么說明你讀入的格式有問題。

2. 默認情況下,函數是以GB(國標碼)形式讀入的。

3. 這種情況下我們需要更改讀入的編碼格式:

 InputStreamReader()中可以有兩個參數,第一個參數:具體的數據讀入流, 第二個參數:以字符串的形式生命數據讀入類型

 五.總結:

以上參考自中國大學mooc, 翁愷老師的java語言進階

圖片來自於中國大學mooc, 翁愷老師的java語言進階

 

做個宣傳:微信公眾號:計算機技術雜談。
目前里面介紹:NLP, 大數據, 視聽覺信號處理的基本知識。每日更新一篇。大家有興趣的可以關注一下。二維碼如下:做個宣傳:微信公眾號:計算機技術雜談。
目前里面介紹:NLP, 大數據, 視聽覺信號處理的基本知識。每日更新一篇。大家有興趣的可以關注一下。二維碼如下:省賽

 

 

 

 

---恢復內容結束---


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM