文本的輸入和輸出
OutputStreamWriter類將使用選定的字符編碼方式,把Unicode字符流轉(zhuǎn)換為字節(jié)流。相反地, InputStreamReader類將包含字節(jié)(用某種字符編碼方式表示的字符)的輸入流轉(zhuǎn)換為可以產(chǎn)生Unicode字符的讀入器。
對于文本輸出,你可能希望使用PRintWriter。這個類擁有以文本格式打印字符串和數(shù)字的方法,它甚至還有一個將PrintWriter鏈接到FileWriter的方便方法。
PrintWriter pw = new PrintWriter("f://f.txt");PrintWriter p = new PrintWriter(new FileWriter("f://f.txt"));//這兩個相同為了寫出到打印寫出器,需要使用與使用System.out時相同的方法print、 println和printf。你可以用這些方法來打印數(shù)字( int、 short、 long、 float、 double)、字符、boolean值、字符串和對象。如果寫出器設(shè)置為自動清空模式,那么只要println被調(diào)用,緩沖區(qū)中的所有字符都會被發(fā)送到它們的目的地(打印寫出器總是帶緩沖區(qū)的)。默認(rèn)情況下,自動清空機(jī)制是不使能的。你可以通過使用PrintWriter(Writer out, Boolean autoFlush)來使能或禁用自動清空機(jī)制。boolean checkError()如果產(chǎn)生格式化或輸出錯誤,則返回true。一旦這個流碰到了錯誤,它就受到了感染,并且所有對checkError的調(diào)用都將返回true。以二進(jìn)制格式寫出數(shù)據(jù),需要使用DataOutputStream。以文本格式寫出數(shù)據(jù),需要使用PrintWriter。在java SE 5.0之前,處理文本輸入的惟一方式就是通過BufferedReader類,它擁有一個readLine方法,使得我們可以讀入一行文本。readLine方法在沒有輸入時返回null。FileReader f = new FileReader("f://f.txt");BufferedReader bf = new BufferedReader(f);String l;while((l=bf.readLine())!=null){	System.out.println(l);}還可以使用Scanner來讀取FileReader f = new FileReader("f://f.txt");Scanner s = new Scanner(f);while(s.hasNextLine()){	System.out.println(s.nextLine());}charset  static SortedMap availableCharsets()獲取這個虛擬機(jī)可用的所有字符集。返回一個映射表,它的鍵是字符集的名字,值是字符集。static Charset forName(String name)獲取給定名字的字符集Set aliases()返回這個字符集的別名集。ByteBuffer encode(String str)將給定的字符串編碼為字節(jié)序列。CharBuffer decode(ByteBuffer buffer)解碼給定的字節(jié)序列。無法識別的輸入將被轉(zhuǎn)換成Unicode的“替代字符” ('/uFFFD').ByteBufferbyte[] array()返回這個緩沖區(qū)所管理的字節(jié)數(shù)組。static ByteBuffer wrap(byte[] bytes)static ByteBuffer wrap(byte[] bytes, int offset, int length)返回管理給定的字節(jié)數(shù)組或給定字節(jié)數(shù)組的某個范圍的字節(jié)緩沖區(qū)。CharBuffer  char[] array()返回這個緩沖區(qū)所管理的碼元數(shù)組。char charAt(int index)返回給定索引處的碼元。String toString()返回由這個緩沖區(qū)所管理的碼元構(gòu)成的字符串。二進(jìn)制的讀寫DataOutput接口定義了用于以二進(jìn)制格式寫數(shù)組、字符、 boolean值和字符串的方法。writeCharswriteBytewriteInt....writeUTf因?yàn)闆]有其他方法會使用UTF-8的這種修訂,所以你應(yīng)該只在寫出用于Java虛擬機(jī)的字符串時才使用writeUTF方法來,例如,當(dāng)你需要編寫一個生成字節(jié)碼的程序時。對于其他的目的,都應(yīng)該使用writeChars方法。為了讀回數(shù)據(jù),可以使用在DataInput接口中定義的下列方法.
readIntreadChar....readUTFvoid readFully(byte[] b)將字節(jié)讀入到數(shù)組b中,其間阻塞直至所有字節(jié)都讀入。int skipBytes(int n)跳過n個字節(jié),其間阻塞直至所有字節(jié)都被跳過。DataInputStream類實(shí)現(xiàn)了DataInput接口,從文件中讀入二進(jìn)制數(shù)據(jù),你需要將DataInputStream與某個字節(jié)源相組合,比如FileInputStream與此類似,要想寫出二進(jìn)制數(shù)據(jù),你可以使用實(shí)現(xiàn)了DataOutput接口的DataOutputStream類。隨機(jī)訪問文件RandomaccessFile類可以在文件中的任何位置查找或?qū)懭霐?shù)據(jù)。磁盤文件都是隨機(jī)訪問的,但是從網(wǎng)絡(luò)而來的數(shù)據(jù)流卻不是。你可以打開一個隨機(jī)訪問文件,只用于讀入或者同時用于讀寫,我們可以通過使用字符串“ r”(用于讀入訪問)或“ rw”(用于讀入/寫出訪問)作為構(gòu)造器的第二個參數(shù)來指定這個選項(xiàng)。
RandomAccessFile r = new RandomAccessFile("f://f.txt", "r");“ r”表示只讀模式; “ rw”表示讀/寫模式; “ rws”表示每次更新時,都對數(shù)據(jù)和元數(shù)據(jù)的寫磁盤操作進(jìn)行同步的讀/寫模式; “ rwd”表示每次更新時,只對數(shù)據(jù)的寫磁盤操作進(jìn)行同步的讀/寫模式RandomAccessFile rw = new RandomAccessFile("f://f.txt", "rw");當(dāng)你將已有文件打開成RandomAccessFile時,這個文件并不會被刪除。隨機(jī)訪問文件有一個表示下一個將被讀入或?qū)懗龅淖止?jié)所處位置的文件指針, seek方法可以將這個文件指針設(shè)置到文件內(nèi)部的任意字節(jié)位置, seek的參數(shù)是一個long類型的整數(shù),它的值位于0到文件按照字節(jié)來度量的長度之間。getFilePointer方法將返回文件指針的當(dāng)前位置。RandomAccessFile類同時實(shí)現(xiàn)了DataInput和DataOutput接口。為了讀寫隨機(jī)訪問文件,可以使用諸如readInt/writeInt和readChar/writeChar之類的方法。要確定文件中的字節(jié)總數(shù),可以使用length方法。
新聞熱點(diǎn)
疑難解答