821
技術社區[雲棲]
IO學習筆記(二)
11. IO實現讀取鍵盤錄入 與 字符流和字節流的轉換
System.out標準的輸出
System.in標準的輸入 static InputStream
in
OutputStreamWriter(OutputStream out)
OutputStreamWriter(OutputStream out, String charsetName)
創建使用指定字符集的 OutputStreamWriter
OutputStreamWriter 是字符流通向字節流的橋梁:可使用指定的
將要寫入流中的字符編碼成字節。它使用的字符集可以由名稱指定或顯式給定,否則將接受平台默認的字符集。 charset
InputStreamReader(InputStream in)
InputStreamReader(InputStream in, String charsetName)
創建使用指定字符集的 InputStreamReader
InputStreamReader 是字節流通向字符流的橋梁:它使用指定的
讀取字節並將其解碼為字符。它使用的字符集可以由名稱指定或顯式給定,或者可以接受平台默認的字符集。charset
InputStream in = System.in();
InputStreamReader isr = new InputStreamReader(in); //字符流
BufferedReader br = new BufferedReader(isr); //裝飾設計模式---bufferedReader緩衝包裝一下,提升性能
//--------BufferedReader br = new BufferedReader(new InputStreamReader(System.in()));(1)
//--------BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("D:\\a.txt")));(4)
OutputStream os = System.out();
OutputStreamWriter osw = new OutputStreamWriter(os);
BufferedWriter bw = new BufferedWriter(osw);
//---------BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out()));(2)
//---------BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("d:\\a.txt"))); 將輸入的文件寫入文件(3)
String line = null;
while ((line=br.readline())!=null) {
bw.write(line);
bw.newLine();
bw.flush();
//System.out.println(line);
}
br.close();
使用IO操作的基本規律和技巧:
(1)首先必須明確源和目的:
源:輸入流 InputStream Reader
目的:輸出流 OutputStream Writer
(2)判斷操作的文件類型
純文本:字符流 Reader Writer
其他文件:字節流 InputStream OutputStream
(3)明確具體要使用的對象
通過設備來區分:
源:內存 硬盤 鍵盤
目的:內存 硬盤 控製台
12. 改變輸入、輸出設備
在System類中提供了兩個靜態的方法可以改變輸入和輸出設備。
static void
setIn(InputStream in)
重新分配“標準”輸入流
static void
setOut(PrintStream out)
重新分配“標準”輸出流System.setIn(new FileInputStream("D:\\a.txt"));
BufferedReader br = new BufferedReader(new BufferedReader(System.in()));
System.setOut(new PrintStream("D:\\b.txt"));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out()));
13. File 類
它既能代表一個文件的名稱,又能代表一個目錄下一組文件的名稱。常用於對文件或文件夾的操作。
File對象也可以作為參數傳遞給流的構造函數。
File(File parent, String child)
根據
parent 抽象路徑名和 child 路徑名字符串創建一個新 File
實例
File(String pathname)
通過將給定路徑名字符串轉換為抽象路徑名來創建一個新 File
實例。
File(String parent, String child)
根據 parent 路徑名字符串和 child 路徑名字符串創建一個新 File
實例。
File file = new File("c:\\abc\\a.txt");-------File file = new File("c:"+ File.separator +"abc"+ File.separator +"a.txt"); //比較通用
File file = new File("c:\\abc","a.txt");
File f = new File("D:\\abc");
File file = new File(f,"a.txt");--------------這一構造的執行,並沒有真正的創建了一個文件或文件夾。
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------
createNewFile()
當且僅當不存在具有此抽象路徑名指定名稱的文件時,不可分地創建一個新的空文件
File file = new File("c:\\abc\\a.txt");
System.out.print(file.createNewFile());------------如果c:\\abc\\a.txt路徑下的文件不存在,那麼會返回true,如果已經存在或者創建失敗,那麼會返回false
boolean delete()
刪除此抽象路徑名表示的文件或目錄
void deleteOnExit()
在虛擬機終止時,請求刪除此抽象路徑名表示的文件或目錄-----在操作結束退出時刪除
當我們創建一個文件,並且對這個文件進行操作,如果這一過程中出現異常,那麼程序將終止,我們的delete()方法將不會被執行。
但是我們一定要刪除這個文件,這時候就要使用deleteOnExit()方法,表示在程序對文件操作結束後,執行次命令,將文件刪除。
File file = new File("c:\\abc\\a.txt");
file.deleteOnExit();
code(對文件內容進行操作);
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
boolean isDirectory()
測試此抽象路徑名表示的文件是否是一個目錄。
boolean
isFile()
測試此抽象路徑名表示的文件是否是一個標準文件。
boolean
isHidden()
測試此抽象路徑名指定的文件是否是一個隱藏文件
File file = new File("c:\\abc\\a.txt");
System.out.print(file.isDirectory()); -------false
System.out.print(file.isFile()); -------false
分析:因為File file = new File("c:\\abc\\a.txt");這條語句是不創建文件或目錄的,所以兩種判斷都為false,那麼我們在執行這兩種判斷時,
有必要先進行判斷對應的文件是否存在,如果不存在的話則沒必要進行後續判斷。
boolean exists()
測試此抽象路徑名表示的文件或目錄是否存在
boolean mkdir()
創建此抽象路徑名指定的目錄-----------------隻能在現有目錄的基礎上創建一個級別的目錄
boolean mkdirs()
創建此抽象路徑名指定的目錄,包括所有必需但不存在的父目錄------------可以創建多級目錄
boolean
isAbsolute()
測試此抽象路徑名是否為絕對路徑名------無論文件是否存在,隻要是絕對路徑該方法就會返回true。否則返回false
……………………………………………………………………………………………………………………………………………………………
String
getPath()
將此抽象路徑名轉換為一個路徑名字符串
String
getAbsolutePath()
返回此抽象路徑名的絕對路徑名字符串
File file = new File(當這裏是一個絕對路徑的時候,上述兩方法返回值相同);
File
getAbsoluteFile()
返回此抽象路徑名的絕對路徑名形式。
String
getParent()
返回此抽象路徑名父目錄的路徑名字符串;如果此路徑名沒有指定父目錄,則返回 null
File file = new File("D:\\IO\\abc.txt");
System.out.println("---:"+ file.getAbsoluteFile()); ---:D:\IO\abc.txt
System.out.println("---:"+file.getParent()); ---:D:\IO
File file2 = new File("ac.txt");
System.out.println("^^^:"+ file2.getAbsoluteFile()); ^^^:D:\IO\ac.txt
System.out.println("^^^:"+file2.getParent()); ^^^:null
System.out.println("---:"+file.getPath()); ---:D:\IO\abc.txt
System.out.println("---:"+file2.getPath()); ---:ac.txt
*************************************************************************************************************************
最後更新:2017-04-02 06:51:55