閱讀821 返回首頁    go 技術社區[雲棲]


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 voidsetIn(InputStream in)  重新分配“標準”輸入流

static voidsetOut(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() 測試此抽象路徑名表示的文件是否是一個標準文件。 

booleanisHidden() 測試此抽象路徑名指定的文件是否是一個隱藏文件

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

  上一篇:go 智捷iOS課堂-關東升老師視頻 上線了
  下一篇:go RSA加密算法