File和IO流
File類
java.io.File類:代表硬盤上的一個文件或目錄
File類的構造方法:
File類沒有無參構造方法,所有構造方法都有參數
File(String pathname):通過指定的絕對路徑創建一個File實例
File(String parent,String child):通過parent路徑名字符串和child路徑名字符串創建一個File實例
File(File parent,String child):根據parent抽象路徑名和child路徑名字符串創建一個File實例
File類的常用方法:
boolean exists():測試此路徑名表示的文件或目錄是否存在,如果存在返回true,否則返回false。
boolean isFile():測試此路徑名表示的文件是否是一個標準文件。
boolean isDicrectory():測試此路徑名表示的文件是否是一個目錄。
boolean createNewFile():當且僅當不存在具有此抽象路徑名指定名稱的文件時,不可分地創建一個新的空文件,創建成功返回true,否則返回false。
boolean mkdir():創建此抽象路徑名指定的目錄。
boolean mkdirs():創建此抽象路徑名指定的目錄,包括所有必需但不存在的父目錄。
boolean delete():刪除此抽象路徑名指定的文件或目錄。
boolean equals(Object obj):測試此抽象路徑名與給定對象是否相等。
String getPath(): 將此抽象路徑名轉換為一個路徑名字符串。
String getAbsolutePath():返回此抽象路徑名的絕對路徑名字符串。
String getName():返回由此抽象路徑名表示的文件或目錄的名稱。
String[] list():返回一個字符串數組,這些字符串指定此抽象路徑名表示的目錄中的文件和目錄。
常用方法示例:
1 public class TestFile1 { 2 public static void main(String[] args) throws IOException { 3 File f1 = newFile("helloworld.txt"); 4 f1.createNewFile();//創建新文件 5 System.out.println(f1.isFile());//判斷是否是文件 6 System.out.println(f1.getAbsolutePath());//得到文件絕對路徑 7 System.out.println(f1.getPath());//得到文件的相對路徑 8 System.out.println(f1.getName());//得到文件名 9 System.out.println(f1.getParent());// 返回此抽象路徑名父目錄的路徑名字符串;如果此路徑名沒有指定父目錄,則返回 null。 10 File f2 = new File("hello/world/java"); 11 f2.mkdirs();//創建目錄 12 String[] liStrings = f2.list(); 13 for(int i = 0;i<liStrings.length;i++) { 14 System.out.println(liStrings[i]); 15 } 16 System.out.println(f2.isDirectory());//判斷是否是目錄 17 f1.delete();//刪除文件 18 System.out.println(f1.exists());//判斷文件是否存在 19 } 20 }
I/O流
IO流體系圖:
註意:IO流都是成對的,每個輸入流都有其對應的輸出流
IO流的分類:
按照數據流的方向:輸入流,輸出流
按照處理數據的單位:字符流,字節流
按照實現的功能:節點流,和處理流
輸入流:InputStream,Reader,及其相關子類
輸出流:OutputStream,Writer,及其相關子類
註意:判斷一個流是輸入流還是輸出流,是相對程序代碼而言的。數據從外部文件流向程序代碼就是輸入流,從代碼流向外部文件就是輸出流。
字節流:二進制格式(只要確定不是純文本格式),InputStrem,OutputStrem及其所有帶有Stream子類
字符流:純文本格式(比如英文/漢字/或其他編碼文字)Reader,Writer及其相關子類
節點流:對文件操作的字符流有FileReader/FileWriter,字節流有FileInputStream/FileOutStream
處理流:
- 緩沖流:緩沖流要“套接”在相應的節點流之上,對讀寫的數據提供了緩沖的功能,提高了讀寫效率,同時增加了一些新的方法。
- 字節緩沖流有BufferedInputStream/BufferedOutputStream,字符緩沖流有BufferedReader/BufferedWriter,字符緩沖流分別提供了讀取和寫入一行的方法ReadLine和WriteLine方法。
- 對於輸出的緩沖流,寫出的數據,會先寫入到內存中,再使用flush方法將內存中的數據刷到硬盤。所以,在使用字符緩沖流的時候,一定要先flush,然後再close,避免數據丟失。
- 轉換流:用於字節數據到字符數據之間的轉換。
- 字符流InputStreamReader/OutputStreamWriter。其中,InputStreamReader需要與InputStream“套接”,OutputStreamWriter需要與OutputStream“套接”。
- 數據流:提供了讀寫Java中的基本數據類型的功能。
- DataInputStream和DataOutputStream分別繼承自InputStream和OutputStream,需要“套接”在InputStream和OutputStream類型的節點流之上。
- 對象流:用於直接將對象寫入寫出。(用於對象序列化和反序列化)
- 流類有ObjectInputStream和ObjectOutputStream,本身這兩個方法沒什麽,但是其要寫出的對象有要求,該對象必須實現Serializable接口,來聲明其是可以序列化的。否則,不能用對象流讀寫。
File和IO流