標籤:can 關閉 cto 序列 對象 構建 路徑 dex 控制
Java.io 包幾乎包含了所有操作輸入、輸出需要的類。所有這些流類代表了輸入源和輸出目標。
Java.io 包中的流支援很多種格式,比如:基本類型、對象、本地化字元集等等。
一個流可以理解為一個資料的序列。輸入資料流表示從一個源讀取資料,輸出資料流表示向一個目標寫資料。
Java 為 I/O 提供了強大的而靈活的支援,使其更廣泛地應用到檔案傳輸和網路編程中。
- 節點流:可以從或向一個特定的地方(節點)讀寫資料。如FileReader.
- 處理流:是對一個已存在的流的串連和封裝,通過所封裝的流的功能調用實現資料讀寫。如BufferedReader.處理流的構造方法總是要帶一個其他的流對象做參數。一個流對象經過其他流的多次封裝,稱為流的連結。
控制台輸入輸出:
JDK 5 後的版本我們也可以使用 Java Scanner 類來擷取控制台的輸入。
讀寫檔案:FileInputStream
方法1:可以使用字串類型的檔案名稱來建立一個輸入資料流對象來讀取檔案
InputStream f = new FileInputStream("C:/java/hello");
方法2:也可以使用一個檔案對象來建立一個輸入資料流對象來讀取檔案。我們首先得使用 File() 方法來建立一個檔案對象:
File f = new File("C:/java/hello");InputStream f = new FileInputStream(f);
FileOutputStream
方法1:使用字串類型的檔案名稱來建立一個輸出資料流對象:
OutputStream f = new FileOutputStream("C:/java/hello")
方法2:也可以使用一個檔案對象來建立一個輸出資料流來寫檔案。我們首先得使用File()方法來建立一個檔案對象:
File f = new File("C:/java/hello"); OutputStream f = new FileOutputStream(f);
//檔案名稱 :fileStreamTest2.javaimport java.io.*; public class fileStreamTest2{ public static void main(String[] args) throws IOException { File f = new File("a.txt"); FileOutputStream fop = new FileOutputStream(f); // 構建FileOutputStream對象,檔案不存在會自動建立 OutputStreamWriter writer = new OutputStreamWriter(fop, "UTF-8"); // 構建OutputStreamWriter對象,參數可以指定編碼,預設為作業系統預設編碼,windows上是gbk writer.append("中文輸入"); // 寫入到緩衝區 writer.append("\r\n"); //換行 writer.append("English"); // 重新整理緩衝沖,寫入到檔案,如果下面已經沒有寫入的內容了,直接close也會寫入 writer.close(); //關閉寫入流,同時會把緩衝區內容寫入檔案,所以上面的注釋掉 fop.close(); // 關閉輸出資料流,釋放系統資源 FileInputStream fip = new FileInputStream(f); // 構建FileInputStream對象 InputStreamReader reader = new InputStreamReader(fip, "UTF-8"); // 構建InputStreamReader對象,編碼與寫入相同 StringBuffer sb = new StringBuffer(); while (reader.ready()) { sb.append((char) reader.read()); // 轉成char加到StringBuffer對象中 } System.out.println(sb.toString()); reader.close(); // 關閉讀取流 fip.close(); // 關閉輸入資料流,釋放系統資源 }}檔案和I/O
還有一些關於檔案和I/O的類,我們也需要知道:
- File Class(類)
- FileReader Class(類)
- FileWriter Class(類)
Java中的目錄
建立目錄:
File類中有兩個方法可以用來建立檔案夾:
- mkdir( )方法建立一個檔案夾,成功則返回true,失敗則返回false。失敗表明File對象指定的路徑已經存在,或者由於整個路徑還不存在,該檔案夾不能被建立。
- mkdirs()方法建立一個檔案夾和它的所有父資料夾。
下面的例子建立 "/tmp/user/java/bin"檔案夾:
import java.io.File; public class CreateDir { public static void main(String args[]) { String dirname = "/tmp/user/java/bin"; File d = new File(dirname); // 現在建立目錄 d.mkdirs(); }}
編譯並執行上面代碼來建立目錄 "/tmp/user/java/bin"。
注意: Java 在 UNIX 和 Windows 自動按約定分辨檔案路徑分隔字元。如果你在 Windows 版本的 Java 中使用分隔字元 (/) ,路徑依然能夠被正確解析。
讀取目錄
一個目錄其實就是一個 File 對象,它包含其他檔案和檔案夾。
如果建立一個 File 對象並且它是一個目錄,那麼調用 isDirectory() 方法會返回 true。
可以通過調用該對象上的 list() 方法,來提取它包含的檔案和檔案夾的列表。
下面展示的例子說明如何使用 list() 方法來檢查一個檔案夾中包含的內容:
import java.io.File; public class DirList { public static void main(String args[]) { String dirname = "/tmp"; File f1 = new File(dirname); if (f1.isDirectory()) { System.out.println( "目錄 " + dirname); String s[] = f1.list(); for (int i=0; i < s.length; i++) { File f = new File(dirname + "/" + s[i]); if (f.isDirectory()) { System.out.println(s[i] + " 是一個目錄"); } else { System.out.println(s[i] + " 是一個檔案"); } } } else { System.out.println(dirname + " 不是一個目錄"); } }}
以上執行個體編譯運行結果如下:
目錄 /tmpbin 是一個目錄lib 是一個目錄demo 是一個目錄test.txt 是一個檔案README 是一個檔案index.html 是一個檔案include 是一個目錄
參考資料:
http://www.tuicool.com/articles/NFBvye
JAVA 流(Stream)、檔案(File)和IO