文件与IO流
文章目錄
- 流的分類
- 字節(jié)流和字符流
- 輸入流InputStream和Reader
- RandomAccessFile
- InputStream 2 String(將字節(jié)輸入流中的數(shù)據(jù)存到字符串中)
流的分類
按流的的方向來分(程序運行的內(nèi)存為參照):
- 輸入流:只能從中讀取數(shù)據(jù),不能向其寫數(shù)據(jù) 。由InputStream和Reader作為基類。
- 輸出流:只能往里面寫數(shù)據(jù),不能讀取數(shù)據(jù)。由OutputStream和Writer作為基類。
按操作的數(shù)據(jù)單元來分:
- 字節(jié)流:操作的最小數(shù)據(jù)單元是8位的字節(jié)。由InputStream和OutputStream作為基類。
- 字符流:操作的最小數(shù)據(jù)單元是16位的字符。由Reader和Writer作為基類。
| 輸入流 | InputStream | Reader |
| 輸出流 | OutputStream | Writer |
按流的角色分:
- 節(jié)點流:可以從/向一個特定的IO設(shè)備(如磁盤,網(wǎng)絡(luò))讀/寫數(shù)據(jù)的流。
- 處理流:對一個已經(jīng)存在的流進行連接或封裝,通過封裝后的流來實現(xiàn)數(shù)據(jù)的讀寫功能。
現(xiàn)階段我一般用的是節(jié)點流,處理流還不會。
字節(jié)流和字符流
輸入流InputStream和Reader
InputStream和Reader都是抽象類,故不能創(chuàng)建實例來執(zhí)行輸入操作。但是它們是輸入流的基類,它們的方法是所有輸入流都可以使用的方法。
InputStream類的方法
Reader類的方法
int read():從輸入流中讀取單個字符,返回所讀取的數(shù)據(jù)(字節(jié)數(shù)據(jù)可以直接轉(zhuǎn)換成int類型)。 //從輸入流中讀取最多b.lenth長度的字符,并將其存放在字節(jié)數(shù)組b中,返回讀取的字節(jié)數(shù)。 int read(char[] cbuf) //從輸入流中讀取最多l(xiāng)en長度的字符,存放在字節(jié)數(shù)組b中(在off位置開始存放),返回實際讀取的字節(jié)數(shù) int read(char[] cbuf,int off,int len)不管是字節(jié)流還是字符流,上面的方法都是可以重復使用的。每次調(diào)用后,輸入流的指針都會向后移動讀取的字節(jié)/字符個數(shù)的位。當read方法放回-1時,表示該輸入流已經(jīng)被讀完了。
package com.test2;import java.io.FileInputStream; import java.io.IOException;public class FileInputStreamTest {public static void main(String[] args){FileInputStream fis = null;byte[] buf = new byte[64];System.out.println("開始讀取數(shù)據(jù)");try {//使用絕對路徑來定位指定文件,由于\代表是轉(zhuǎn)義字符,故需要\\作為目錄分隔符fis = new FileInputStream("G:\\03 code\\Java\\15\\src\\com\\test2\\FileInputStreamTest.java");//fis = new FileInputStream("FileInputStreamTest.java");int hasRead = 0;while ((hasRead=fis.read(buf)) > 0){System.out.println("輸入流讀取的數(shù)據(jù)是:");//使用平臺默認的字符集,將字節(jié)數(shù)組buf的第0位,長度hasRead的子數(shù)組解碼成一個新的String對象System.out.printf(new String(buf,0,hasRead));}fis.close();}catch (IOException e){e.printStackTrace();}} }輸入流移動指針的方法
void mark(int readAheadLimit):在指針當前位置記錄一個標記 boolean markSupported(): 判斷此輸入流是否支持mark操作 void reset(): 將指針重新定位到上一級標記處 long skip(long n): 指針向前移動n個字節(jié)/字符RandomAccessFile
與普通的輸入輸出流不同。
InputStream 2 String(將字節(jié)輸入流中的數(shù)據(jù)存到字符串中)
總結(jié)
- 上一篇: 项目部署到服务器
- 下一篇: GitHub基本使用