網(wǎng)站建設地位友情鏈接交換網(wǎng)
Java知識點總結(jié):想看的可以從這里進入
目錄
- 5、打印流
- 6、轉(zhuǎn)換流
- 7、數(shù)據(jù)流
- 8、隨機訪問流
5、打印流
實現(xiàn)將基本數(shù)據(jù)類型的數(shù)據(jù)格式轉(zhuǎn)化為字符串輸出,它們提供了一系列重載的print()和println()方法,用于多種數(shù)據(jù)類型的輸出,這種流不會出現(xiàn)IOException異常。
-
PrintWriter:在Java的IO流中提供了字符輸出的類PrintWriter,它具有自動刷新緩沖字符輸出流,按行寫出字符串,提供println()方法用于自動換行。
PrintWriter fw = new PrintWriter(file);
-
PrintStream:在Java的IO流中提供了字節(jié)輸出的類PrintStream,它打印的所有字符都使用平臺的默認字符編碼轉(zhuǎn)換為字節(jié)。在需要寫入字符而不是寫入字節(jié)的情況下,應該使用 PrintWriter 類。
System.out返回的是PrintStream的實例
PrintStream printStream = new PrintStream(file);
public class Io {public static void main(String[] args) throws Exception{//創(chuàng)建文件對象File file1 = new File("d:/mydata/a.txt");File file2 = new File("d:/mydata/acopy.txt");try (FileReader fr = new FileReader(file1);BufferedReader in = new BufferedReader(fr);PrintWriter fw = new PrintWriter(file2); //字符輸出流){String line;//一次讀取一行,讀到換行時結(jié)束while((line=in.readLine())!=null){fw.println(line); //println直接換行,這種比使用文件字符流、緩沖字符流更方便}} catch (Exception e) {e.printStackTrace();}}
}
6、轉(zhuǎn)換流
在Java中提供了將字節(jié)流轉(zhuǎn)換成字符流的轉(zhuǎn)換流,InputStreamReader
和OutputStreamWriter
。流在轉(zhuǎn)換后,讀取數(shù)據(jù)時會存在編碼的問題。
計算機上顯示的信息在計算機都是以二進制形式保存的,所以必須按照一定的規(guī)則將二進制數(shù)據(jù)解析并顯示,如果規(guī)則不正確則會導致亂碼問題。字符集 Charset
:是一個系統(tǒng)支持的所有字符的集合,包括各國家文字、標點符號、圖形符號、數(shù)字等。常見的字符集有ASCII、GBK、Unicode(常用的為UTF-8)等。
常見的編碼表
ASCII:美國標準信息交換碼。用一個字節(jié)的7位可以表示。
ISO8859-1:拉丁碼表。歐洲碼表用一個字節(jié)的8位表示。
GB2312:中國的中文編碼表。最多兩個字節(jié)編碼所有字符
GBK:中國的中文編碼表升級,融合了更多的中文文字符號。最多兩個字節(jié)編碼
Unicode:國際標準碼,融合了目前人類使用的所有字符。為每個字符分配唯一的字符碼。所有的文字都用兩個字節(jié)來表示。
UTF-8:變長的編碼方式,可用1-4個字節(jié)來表示一個字符。
在接收鍵盤輸入System.in時,就是使用的轉(zhuǎn)換流,將字節(jié)轉(zhuǎn)換成字符流,再使用BufferedReader
- InputStreamReader:將InputStream轉(zhuǎn)換為Reader
- OutputStreamWriter:將Writer轉(zhuǎn)換為OutputStream
FileInputStream fis = new FileInputStream(file1); //文件字節(jié)流
InputStreamReader is = new InputStreamReader(fis,"utf-8"); //將字節(jié)流轉(zhuǎn)為字符流
BufferedReader in = new BufferedReader(is); //再使用緩沖流FileOutputStream fos = new FileOutputStream(file2);
OutputStreamWriter os = new OutputStreamWriter(fos,"utf-8");
BufferedWriter out = new BufferedWriter(os);
7、數(shù)據(jù)流
數(shù)據(jù)流(DataInputStream、DataOutputStream)專門用來操作基本數(shù)據(jù)類型,上述的字符流和字節(jié)流不能直接操作像long,float,double,boolean這些數(shù)據(jù)類型,而數(shù)據(jù)流對八種基本數(shù)據(jù)類型都可以操作。
數(shù)據(jù)流本身也屬于一種字節(jié)流,屬于處理流,寫入的是二進制,通過對應輸出流輸出所需數(shù)據(jù)。
FileInputStream fis = new FileInputStream(file1);
BufferedInputStream bis = new BufferedInputStream(fis);
DataInputStream in = new DataInputStream(bis); //數(shù)據(jù)流FileOutputStream fos = new FileOutputStream(file2);
BufferedOutputStream bos = new BufferedOutputStream(fos);
DataOutputStream out = new DataOutputStream(bos); //數(shù)據(jù)流
DataOutputStream提供的一些對應數(shù)據(jù)類型的方法
DataInputStream提供的讀取方法,讀取的類型要一致,寫入的順序和讀取的順序一致
?
8、隨機訪問流
RandomAccessFile 聲明在java.io包下,直接繼承于java.lang.Object類,它實現(xiàn)了DataInput、DataOutput這兩個接口,所以它同時擁有讀寫的功能。
它采用隨機訪問,程序可以直接跳到文件的任意地方來讀、寫文件,它內(nèi)部采用一個指針來記錄當前讀取的位置,而RandomAccessFile之所以可以隨機訪問,就是因為能自由的移動該指針。
- ong getFilePointer():獲取指針的當前位置
- void seek(long pos):將指針移動到指定的位置
//構(gòu)造方法,其中mode 參數(shù)指定了RandomAccessFile 的訪問模式:
//1、r: 以只讀方式打開,不會創(chuàng)建文件
//2、rw:打開以便讀取和寫入,如果文件不存在會創(chuàng)建文件
//3、rwd:打開以便讀取和寫入;同步文件內(nèi)容的更新
//4、rws:打開以便讀取和寫入;同步文件內(nèi)容和元數(shù)據(jù)的更新
public RandomAccessFile(String name, String mode)throws FileNotFoundException{this(name != null ? new File(name) : null, mode);
}
public RandomAccessFile(File file, String mode)throws FileNotFoundException{this(file, mode, false);
}
其實這個類通常用來下載,我們在下載時,會創(chuàng)建兩個文件,一個文件是與被下載文件大小相同的空文件,另一個文件用來記錄指針的位置,如果這次下載暫停后,下次繼續(xù)下載時可以通過記錄的指針位置繼續(xù)上次的下載。