《Java從入門到放棄》JavaSE入門篇:文件操作


Java中的文件操作還有點小復雜···

不過沒關系,我會把它講得很簡單,嘿嘿嘿!!!j_0020.gif

在講Java中的文件操作前,先了解一個概念——“流”,比如我們把一個杯子的水倒到另一個同樣大小的杯子,就是以流的方式處理的(如果你把水凍成冰了再整個放進去就當我沒說吧 - -)。

其實我的理解很簡單,“流”就是一串數據,至於這一串數據中每個數據單元有多大,Java中提供了兩種處理方法:字節流和字符流

無論是字節流還是字符流,根據處理方式又可以分為輸入流和輸出流。這一篇,我們就來簡單學學字節流和字符流的輸入和輸出。

 

一、字節流

    字節都知道吧?

    什么?不知道!!!好吧,不知道就不知道吧,那就簡單說說,計算機保存數據的最小單位是bit(位),這是一個二進制單位,它的值只有0和1。

    一個字節就是一個Byte(注意這是大B,那個是小b),一個字節占8bit的大小。像現在的操作系統有什么32位啊64位啊,主要就是處理數據的時候有區別,32位的每次處理的最小單位是4個字節,而64的是8個字節。具體還有很多區別之處,這兒我們就沒必要細說了。如果感興趣的話,那就百度走起!!!

    其實文件操作很簡單,跟趙本山小品中把大象放進冰箱的步驟是一樣一樣滴。

    第一步:打開冰箱門

    第二步:把大象放進去(或者拿出來)

    第三步:關閉冰箱

    就這三步,是不是超級簡單啊!!!j_0028.gif

    因為無論讀文件還是寫文件的步驟都一樣,只不過使用的類不一樣,所以我們直接來看看如何復制文件吧。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
/**
  * 字節流方式復制文件(任何文件都可以復制)
  * @param oldFile 被復制文件
  * @param newFile 復制后的文件
  */
public  static  void  copyFile(String oldFile, String newFile){
     File srcFile =  new  File(oldFile);    //源文件對象
     File destFile =  new  File(newFile);   //目標文件對象
     try  {
         if  (!(destFile.exists())) {       //判斷目標文件是否存在
             destFile.createNewFile();   //如果不存在則創建新文件
       }
       //使用源文件對象創建文件輸入流對象
       FileInputStream fis =  new  FileInputStream(srcFile);
       //使用目標文件對象創建文件輸出流對象
       FileOutputStream fos =  new  FileOutputStream(destFile);
           
       byte [] buf =  new  byte [ 1024 ];   //創建字節數組,作為臨時緩沖,每次讀取的數據量
       System.out.println( "開始復制文件..." );
       while  (fis.read(buf) != - 1 ) {   //循環從文件輸入流中讀取數據,-1表示讀完了文件
             fos.write(buf);     //寫入到文件輸出流中
       }
       System.out.println( "文件復制成功!" );
 
     fis.close();     //關閉流
     fos.close();
     catch  (Exception e) {
     e.printStackTrace();
    
}

里面涉及到的幾個對象簡單介紹一下吧。

1.File類:既可以表示文件,也可以表示目錄。常用的方法如下:

wKiom1nAcKLwygWcAAD6raozrAk957.png

2.FileInputStream類:繼承於InputStream類,用於讀文件,以字節方式將文件中的數據輸入到內存中。

3.FileOutputStream類:繼承於OutputStream類,用於寫文件,以字節方式將內存中的數據輸出到文件中。

注意:因為是以字節的方式讀或寫,所以在處理的過程中,文件是無法使用的,就和我們在網上下載文件是一樣滴道理


二、字符流

    字符流就很好理解了,以字符為最小單位來處理數據,一般用於處理文本類的文件比較方便,很多小說閱讀器讀取TXT的小說就使用這種方式來處理。

    接下來,分別寫兩個方法以字符流的方式來處理文本文件。

2.1逐行讀取文件內容,並顯示到控制台

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
/**
  * 讀取文本文件內容
  * @param path 文件路徑
  */
public  static  void  txtRead(String path){
     File file =  new  File(path);
     try  {
         //通過文件對象創建文件讀取流對象
         FileReader fr =  new  FileReader(file);
         //將文件讀取流包裝成緩沖讀取流
         BufferedReader br =  new  BufferedReader(fr);
         
         String str;
           //逐行讀取數據
         while  ((str = br.readLine()) !=  null ){
             System.out.println(str);
         }
         br.close();    //關閉流
         fr.close();    //關閉流
     catch  (Exception e) {
         e.printStackTrace();
     }
}

 

2.2將輸入的文本保存到文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
/**
  * 寫入文本文件
  * @param path 文件路徑
  */
public  static  void  txtWriter(String path){
     File file =  new  File( "test.txt" );
     try  {
         //通過文件對象創建文件輸出字符流對象
         FileWriter fw =  new  FileWriter(file);
         //將文件輸出字符流包裝成緩沖流
         BufferedWriter bw =  new  BufferedWriter(fw);
         bw.write( "大家好!" );
         bw.write( "我正打算放棄Java," );
         bw.newLine();     //換個新行
         bw.write( "請多多指教。" );
         bw.close();       //關閉流
         fw.close();       //關閉流
     catch  (Exception e) {
         e.printStackTrace();
     }
}

 

OK,文件的基本操作就介紹這到兒吧,其實實際開發用得更多的一種方式是序列化和反序列化,這個操作的代碼比較簡單,就不在這兒介紹了,有興趣的小伙伴自行百度一下吧。

 

“軟件思維”博客地址:51CTO博客園,感興趣的小伙伴可以去看相關的其它博文。  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM