首先讓我們來思考一下什麼是檔案。
這裡的檔案專指電腦中的檔案,如我們經常使用的txt文字檔、word文檔、視頻檔案、音頻檔案、windows系統下的exe可執行檔、編寫程式的原始碼檔案等等,我們平時上網衝浪瀏覽的網頁,其實也是一種檔案。它與我們的電腦生活形影不離,一句話,我們使用電腦,就是與檔案打交道。
概括的講,電腦檔案就是儲存在某種存放裝置上的資料流。
為了有組織的管理這些儲存在電腦中的檔案,以人類辦公中的檔案夾為靈感,設計了電腦中的檔案夾\目錄概念。接著就引入了檔案系統,這個專門負責管理檔案和檔案夾\目錄的軟體。如Windows下的NTFS、FAT32和Linux下的Ext4,請參考相關詞條。
下面進入正題,我們如何使用Java來操作這些檔案。
一、瞭解一下Java的IO包
概述如下:通過資料流、序列化和檔案系統來提供系統的輸入和輸出。
此包有12個介面、51個類(1.6),其中最需要我們首先掌握的是:
File類、Reader類、Writer類、InputStream類和OutputStream。
1、先來看看File類
我們這個話題的主角,此類提供了很多方法來操作檔案,並且是與作業系統無關的,我們不用把精力投入在每個作業系統獨特的路徑寫法,都交給這個類吧。對於檔案操作,我們最常使用的幾個是:
建立檔案夾-mkdir()
建立檔案-createNewFile()
刪除檔案夾或檔案-delete()
查看檔案的屬性,如:
檔案大小:length()
是否為隱藏檔案:isHidden()
是否可讀寫:canRead()、canWrite()
最後修改時間:lastModified()
例子:
import java.io.*;public class TestFile{ public static void main(String[] args) { String folderPath = "./linc"; String filePath = "./linc/tmp.txt"; try { File folder = new File(folderPath); File file = new File(filePath); System.out.println("make dir is " + file.mkdir()); System.out.println("make file is " + file.createNewFile()); System.out.println("file size is " + file.length()); System.out.println("is hidden: " + file.isHidden()); System.out.println("can read: " + file.canRead()); System.out.println("is can write: " + file.canWrite()); System.out.println("last modified: " + new Date(file.lastModified())); } catch(IOException ex) { System.out.println("IOException: " + ex.getMessage()); } }}
2、Reader和Writer類
讀寫字串流的高手,這是inputStream類和OutputStream最大的區別。當我們對文字檔進行輸入輸出操作時,多使用Reader和Writer,會帶給我沒很大的便利。
先說寫,然後咱們再讀。需要注意的是,操作完畢後一定要調用close()方法。
Writer:
此類的繼承體系如下:
java.lang.Object
|
|____java.io.Writer
|
|____java.io.PipedWriter
|
|____java.io.PrintWriter
|
|____java.io.FilterWriter
|
|____java.io.StringWriter
|
|____java.io.BufferedWriter
|
|____java.io.CharArrayWriter
|
|____java.io.OutputStreamWriter
|
|____java.io.FileWriter
顧名思義,最重要的方法是write,並重載了多次方便我們使用。
Reader:
此類的繼承體系與Writer類似:
java.lang.Object
|
|____java.io.Reader
|
|____java.io.PipedReader
|
|____java.io.StringReader
|
|____java.io.FilterReader
| |
| |__java.io.PushbackReader
|
|____java.io.BufferedReader
| |
| |__java.io.LineNumberReader
|
|____java.io.CharArrayReader
|
|____java.io.InputStreamReader
|
|____java.io.FileReader
此類最重要的方法是read(),也是重載多次。