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