IO流

一、java.io 包,輸入輸出包。當我們需要做文件的處理,比如上傳下載等,都需要使用到 java.io 包。

1、File 類:
   (1)File 類的相關概念
          ①、File類是Java.io 包中很重要的一個類;
          ②、File類的對象可以表示文件,還可以表示目錄,在程序中一個 File 類對象可以代表一個文件或目錄;
          ③、File對象可以對文件或目錄的屬性進行操作,如文件名、最後修改日期,文件大小等;
          ④、File對象無法操作文件的具體數據,即不能直接對文件進行讀/寫操作。

   (2)File類的4種構造方法
          ①、File(String pathname) 指定文件(或目錄)名和路徑創建文件對象;
  ②、File(File parent, String child)  根據 parent 抽象路徑名和 child 路徑名字符串創建一個新 File 實例;
          ③、File(String parent, String child)  根據 parent 路徑名字符串和 child 路徑名字符串創建一個新 File 實例;
  ④、File(URI uri) 通過將給定的 file: URI 轉換爲一個抽象路徑名來創建一個新的 File 實例。

         例如:
       //在當前目錄下創建一個與aaa.txt文件名相關聯的文件對象
              File f1=new File("aaa.txt");
    //指明詳細的路徑及文件名,請注意雙斜線或者用單反斜槓
    File f2=new File("D:\\java\\Hello.java");
    //指明詳細的路徑及目錄名,請注意雙斜線
    File f3=new File("D:\\java");

     (3)File類的常用的方法
       boolean exists()  判斷文件是否存在,存在返回true,否則返回false;
       boolean isFile()  判斷是否爲文件,是文件返回true,否則返回false;
       boolean isDirectory()  判斷是否爲目錄,是目錄返回true,否則false;
          String getName()  獲得文件名;
          String getAbsolutePath()  獲得文件的絕對路徑;
       long length()  獲得文件的長度(字節數);
                boolean createNewFile() throws IOException  創建新文件,創建成功返回true,否則返回false,有可能拋                   出IOException異常,必須捕捉;
       boolean delete()  刪除文件,刪除成功返回true,否則返回false。

    例如:
  public static void main(String[] args) {
  //創建File對象
  File file = new File("notes.txt");
  File dir = new File("E:\\project");

  System.out.println("file是否是文件:"  +  file.isFile());
  System.out.println("dir是否是目錄:"  +  dir.isDirectory());
  System.out.println("file是否可讀:"  +  file.canRead());
  System.out.println("file是否存在:"  +  file.exists());
                 }

   File類的遍歷
    public String[] list()  將目錄下的子目錄以及文件的名字,返回到String數組中
    public File[] listFile()  將目錄下的子目錄以及文件的實例返回到File數組中
           
 例如:
     public static void main(String[] args) {
File file=new File("D:\\test");
String[] fileNameList=file.list();   //使用list方法
for(String s:fileNameList){
     System.out.println(s);
}
  File[] fileList=file.listFiles();   //使用listFiles方法
for(File f:fileList){
System.out.println(f.getAbsolutePath());
        }
               } 


   (4)文件/文件名過濾器
          ①、文件名的過濾器接口:interface FilenameFilter 常常用來過濾不符合規格的文件名
       
      ②、需要重寫 accept 方法自定義過濾器規則
             方法:
                boolean accept(File dir,String name)
          dir:表示文件的當前目錄
          name:表示當前目錄的子目錄或者文件的名字
          
   ③、File類中提供了使用文件名過濾器遍歷目錄的方法
             方法:
                 String[] list(FilenameFilter filter)
             把滿足指定過濾條件的文件和目錄,返回到String數組中
           
   File[] listFiles(FilenameFilter filter)
      把滿足制定過濾條件的文件和目錄,返回到File的數組中
                 
例如:
    import java.io.*;
    public class FileNameFilterDemo {
    public static void main(String [] args){
  File file=new File("D:\\123");
  String [] strfile=file.list(new NameFilter(".txt"));
  for(String s : strfile){
  System.out.println("後綴名是.txt文件是="+s);
   }
      }
      }
    
    class NameFilter implements FilenameFilter{
       private String endStr;        
       public NameFilter(String endStr){
        super();
        this.endStr=endStr;
       }

       public boolean accept(File dir, String name) {
         return name.endsWith(endStr);
       }
    }

④、文件過濾器接口:interface FileFilter 通常用於檢測文件是否存在
    
        ⑤、需重寫 accept 方法自定義過濾規則
           方法:
              boolean accept(File pathName)
        pathName:表示當前目錄的子目錄或者文件的名字
         
   ⑥、File類中提供了使用文件過濾器遍歷目錄的方法
                          File[] listFiles(FilenameFilter filter) 把滿足制定過濾條件的文件盒目錄,返回到file數組中
            
  例如:
                 public static void main(String[] args) {
       File file=new File("D:\\123");
       File [] files=file.listFiles(new Filter());
       for(File fil : files){
         System.out.println(fil+" 是目錄");
         }

     //過濾器的定義
              class Filter implements FileFilter{
       public boolean accept(File pathname) {
     return  pathname.isDirectory();
       }
     }



2、輸入和輸出的概念:
   (1)輸入輸出(I/O)
        ①、是程序與外部設備或其他計算機進行交互的操作
        ②、幾乎所有的程序都具有輸入與輸出的操作
        ③、如從鍵盤上讀取數據,從本地或者網絡上的文件讀取數據或寫入數據等
        ④、通過輸入和輸出操作可以從外界接收信息,或者把信息傳遞給外界
        ⑤、Java把這些輸入和輸出操作用流來實現,通過統一的接口來表示,從而使程序設計更爲簡單
   
   (2)輸入還是輸出是相對於內存來說的
   (3)把數據讀到內存中,稱爲輸入,即 Input,進行數據的 read 操作
   (4)從內存往外部設備寫數據,稱爲輸出,即 Output,進行數據的 write 操作


3、輸入輸出流:

   (1)流按數據的傳輸方向分爲
       ①、輸入流:往內存中讀叫做輸入流
       ②、輸出流:從內存中往外面寫叫做輸出流
       
  (2)所有輸入流都是 InputStream 類或者 Reader 類的子類
       ①、類名以 InputStream 結尾的類都是 InputStream 的子類
       ②、類名以 Reader 結尾的類都是 Reader 類的子類
       
  (3)所有輸出流都是 OutputStream 類或者 Writer 類的子類 
       ①、類名以 OutputStream 結尾的類都是 OutputStream 的子類
       ②、類名以 Writer 結尾的類都是 Writer 類的子類


4、根據輸入輸出是的編碼不同,可以分爲字節流和字符流:

   從數據流編碼格式上劃分
     -字節流
     -字符流
     
   InputStream 和 OutputStream 的子類都是字節流
     -可以讀寫二進制文件,主要處理音頻,圖片,歌曲,字節流處理單元爲1字節
     
   Reader 和 Writer 的子類都是字符流
     -主要處理字符或者字符串,字符流處理單元爲2個字節
     -字節流將讀取到的字節數據,去制定的編碼表中獲取對應文字
 
字節流中常用類
     -字節輸入流 FileInputStream
     -字節輸出流 FileOutputStream
     
字符流中常用類
     -字符輸入流 FileReader
     -字符輸出流 FileWriter


5、節點流和處理流:

   根據封裝的類型不同流分爲
       -節點流:如果流封裝的是某種特定的數據源,如文件,字符串,字符串數組等,稱爲節點流
       -處理流:如果流封裝的是其他流對象,稱爲處理流。處理流提供了緩衝功能,提高讀寫效率

   節點流常用類
   字節輸入流:FileInputStream
   字節輸出流:FileOutputStream
     字符輸入流:FileReader
     字符輸出流:FileWriter
     
   處理流中常用的類
   緩衝字節輸出流:BufferedOutputStream
   緩衝字節輸入流:BufferedIutputStream
   緩衝字符輸入流:BufferedReader
   緩衝字符輸出流:BufferedWriter
   
   處理流的特點
   字符緩衝輸入流提供了讀取一行的方法 readLine()
   字符緩衝輸出流提供了寫入一個空行的方法 newLine()
      字符緩衝輸出流,把寫入的數據先寫入到內存,再使用 flush() 方法將內存數據刷到硬盤
      
      注意:在使用字符緩衝輸出流是,一定先 flush(),然後 close(),避免數據的丟失


6、字節流和字符流的轉換:
   (1)轉換流的由來
       字符流與字節流之間的橋樑
       方便了字符流與字節流之間的操作

   (2)轉換流的應用
         字節流中的數據都是字符時,轉成字符流操作更高效率

   (3)字節流轉換成字符流的橋樑
          -InputStreamReader
          
        例如:
           InputStreamReader(InputStream in)
     InputStreamReader(InputStream in,String charsetName)

   (4)字符流轉換成字節流的橋樑
          -OutputStreamWriter
          
       例如:
          OutputStreamWriter(OutputStream out)
        OutputStreamWriter(OutputSttream out String charsetName)
        
      注意:它讀入字節,並根據制定編碼方式,將之轉換爲字符流使用的編碼方式可能由名稱指定,或平臺可接受的                    缺省編碼方式

   (5)轉換流程圖
   
          InputStream in = System.in;
                 ||
         InputStream isr = new InputStream(in);
                 ||
       BufferedReader br = new BufferedReader(isr);
                 ||
             String line = br.readLine(); 


   (6)字符流轉成字節流圖解
   
    FileOutputStream fs= new FileOutputStream("D:\\demo.txt");
                  ||
  OutputStreamWriter ow= new OutputStream(fs);
                  ||
       BufferWriter  bw= new BufferedWriter(ow);
                  ||
           bw.write(line);

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章