java文件io

1.構造方法可以用來生成 File 對象:
File(String directoryPath)
這裏,directoryPath 是文件的路徑名。
File 定義了很多獲取 File 對象標準屬性的方法。例如:getName( )用於返回文件
名,getParent( )返回父目錄名,exists( )方法在文件存在的情況下返回 true,反之返回false。然而 File 類是不對稱的,意思是雖然存在可以驗證一個簡單文件對象屬性的很多方法,但是沒有相應的方法來改變這些屬性.


2.RandomAccessFile 可以以只讀或讀寫方式打開文件, 具體使用哪種方式取決於用戶創建 RandomAccessFile 類對象的構造方
法:
new RandomAccessFile(f,"rw"); //  讀寫方式
new RandomAccessFile(f,"r"); //  只讀方式
注意:
當程序需要以讀寫的方式打開一個文件時,如果這個文件不存在,程序會自動創建此文件。


3.String.substring(int beginIndex,int endIndex)方法可以用於取出一個字符串中的部分子字符串,但要注意的一個細節是:子字符串中的第一個字符對應的是原字符串中的腳標爲 beginIndex 處的字符,但最後的字符對應的是原字符串中的腳標endIndex-1 處的字符,而不是 endIndex 處的字符。


4.流類
Java 的流式輸入/輸出建立在四個抽象類的基礎上:InputStream, OutputStream,
Reader 和 Writer。它們用來創建具體流式子類。儘管程序通過具體子類執行輸入/輸出
操作,但頂層的類定義了所有流類的基本通用功能。
InputStream 和 OutputStream 設計成字節流類。Reader 和 Writer 爲字符流設計。
字節流類和字符流類形成分離的層次結構。一般說來,處理字符或字符串時應使用字
符流類,處理字節或二進制對象時應用字節流類。
一般在操作文件流時,不管是字節流還是字符流都可以按照以下的方式進行:
(1) 使用 File  類找到一個文件
(2) 通過 File  類的對象去實例化字節流或字符流的子類
(3) 進行字節(字符)的讀、寫操作
(4) 關閉文件流




5.FileInputStream(文件輸入流)
FileInputStream 類創建一個能從文件讀取字節的InputStream 類, 它的兩個常用的
構造方法如下:
FileInputStream(String filepath)
FileInputStream(File fileObj)
這兩個構造方法都能引發FileNotFoundException異常。這裏,filepath 是文件的絕
對路徑,fileObj是描述該文件的File對象。




6.FileOutputStream(文件輸出流)
FileOutputStream 創建了一個可以向文件寫入字節的類 OutputStream,它常用的構造方法如下:
FileOutputStream(String filePath)
FileOutputStream(File fileObj)
FileOutputStream(String filePath, boolean append)
它們可以引發 IOException 或 SecurityException 異常。這裏 filePath 是文件的絕對路徑,fileObj 是描述該文件的 File 對象。如果 append 爲 true,文件則以設置搜索路徑模式打開。FileOutputStream 的創建不依賴於文件是否存在在創建對象時,
FileOutputStream 會在打開輸出文件之前就創建它。 這種情況下如果試圖打開一個只讀文件,會引發一個 IOException 異常。


7.System.in 和 System.out
爲了支持標準輸入輸出設備,Java 定義了兩個特殊的流對象:System.in 和
System.out。System.in 對應鍵盤,是 InputStream 類型的,程序使用 System.in 可以讀
取從鍵盤上輸入的數據;System.out 對應顯示器,是 PrintStream 類型的,PrintStream
是 OutputStream 的一個子類,程序使用 System.out 可以將數據輸出到顯示器上。鍵盤
可以被當作一個特殊的輸入流,顯示器可以被當作一個特殊的輸出流。


8.InputStreamReader 和 OutputStreamWriter, 這兩個類是字節流和字符流之間轉換的類,InputStreamReader 可以將一個字節流中的字節解碼成字符,OuputStreamWriter 將寫入的字符編碼成字節後寫入一個字節流。
InputStreamReader  有兩個主要的構造函數:
InputStreamReader(InputStream in)
// 用默認字符集創建一個 InputStreamReader 對象
InputStreamReader(InputStream in,String CharsetName)
// 接受已指定字符集名的字符串,並用該字符集創建對象
OutputStreamWriter  也有對應的兩個主要的構造函數:
OutputStreamWriter(OutputStream in)
// 用默認字符集創建一個 OutputStreamWriter 對象
OutputStreamWriter(OutputStream in,String CharsetNarme)
// 接受已指定字符集名的字符串,並用該字符集創建 OutputStreamWriter 對象
爲了達到最高的效率,避免頻繁地進行字符與字節間的相互轉換,最好不要直接
使用這兩個類來進行讀寫,應儘量使用 BufferedWriter 類包裝 OutputStreamWriter 類,用 BufferedReader 類包裝 InputStreamReader 類。例如:
BufferedWriter out=new BufferedWriter(newOutputStreamWriter(System.out));
BufferedReader in=new BufferedReader(new InputStreamReader(System.in));
接着從一個實際的應用中來了解 InputStreamReader 的作用, 怎樣用一種簡單的方
式一下子就讀取到鍵盤上輸入的一整行字符呢?只要用下面的兩行程序代碼就可以
解決這個問題:
BufferedReader in=new BufferedReader(new InputStreamReader(System.in));
String strLine = in.readLine();
可見,構建 BufferedReader 對象時,必須傳遞一個 Reader 類型的對象作爲參數,
而鍵盤對應的 System.in 是一個 InputStream 類型的對象,所以這裏需要用到一個
InputStreamReader 的轉換類, 將 System.in 轉換成字符流之後, 放入到字符流緩衝區之中,之後從緩衝區中每次讀入一行數據。
【 格式 10-1 由鍵盤輸入數據基本形式 】
import java.io.*;
public class class_name  // 類名
{
public static void main(String args[]) throws IOException
{
BufferedReader buf;  // 聲明 buf 爲 BufferedReader 類的變量
String str;  // 聲明 str 爲 String 類型的變量
... ...
buf=new BufferedReader(new InputStreamReader(System.in));
str=buf.readLine();  // 讀入字符串至 buf
... ...
}
}


9.使用 String 類中的 get Bytes()方法,爲字符進行編碼轉換。
例:
 // 在這裏將字符串通過 getBytes()方法,編碼成 GB2312
byte b[] = "大家一起來學 Java 語言".getBytes("GB2312") ;




10.對象序列化
所謂的對象序列化(在某些書中也叫串行化) ,是指將對象轉換成二進制數據流
的一種實現手段,通過將對象序列化,可以方便的實現對象的傳輸及保存。
在 Java 中提供了 ObjectlnputStream 與 ObjectOutputStream 這兩個類用於序列化對
象的操作。這兩個類是用於存儲和讀取對象的輸入輸出流類,不難想象,只要把對象
中的所有成員變量都存儲起來,就等於保存了這個對象,之後從保存的對象之中再將
對象讀取進來就可以繼續使用此對象。ObjectInputStream 與 ObjectOutputStream 類,可以幫開發者完成保存和讀取對象成員變量取值的過程,但要求讀寫或存儲的對象必
須實現了 Serializable 接口, 但 Serializable 接口中沒有定義任何方法, 僅僅被用作一種標記,以被編譯器作特殊處理.


11.如果不希望類中的屬性被序列化,可以在聲明屬性之前
加上 transient 關鍵字。如下所示,下面的代碼修改自前面所用到的 Person.java 程序,
在聲明屬性時,前面多加了一個 transient 關鍵字。
04  private transient String name ;
05  private transient int age ;
再此運行 SerializableDemo.java 程序時,其輸出結果爲:
姓名:null ,年齡:0
由輸出結果可以發現,Person 類中的兩個屬性並沒有被保存下來,輸出時,是直
接輸出了其默認值。


12.
1、 Java 中要進行 IO 操作,需要導入 java.io 包。
2、 Java 中的 File 類是唯一操作磁盤文件的類。
3、 Java 中的數據操作主要分爲兩種:
(1) 、 字節流(OutputStrea、InputStream)
(2) 、 字符流(Writer、Reader)
這四個類都是抽象類,使用時,都必須依靠其子類實例化。
4、 Java 定義了兩個特殊的流對象:System.in 和 System.out。System.in 對應鍵盤,是
InputStream 類型的, 程序使用 System.in 可以讀取從鍵盤上輸入的數據;System.out
對應顯示器,可以向顯示器上輸出內容。
5、 InputStreamReader 和 OutputStreamWriter, 這兩個類是字節流和字符流之間轉換的
類, InputStreamReader 可以將一個字節流中的字節解碼成字符, OuputStreamWriter
將寫入的字符編碼成字節後寫入一個字節流。
6、 一個類實現了 Serializable 接口之後,此類的對象可以被序列化,就表示可以保存
在文件之中、或網絡傳輸之中。如果不希望類中的某個屬性被保存下來,可以用
transient 關鍵字聲明屬性。







發佈了29 篇原創文章 · 獲贊 17 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章