天天看點

[零基礎學JAVA]Java SE應用部分-27.Java IO操作(01)

JAVA IO操作目标

<a href="http://redking.blog.51cto.com/attachment/200902/24/27212_1235484669GRP5.png"></a>

本季知識點

1、File類 

2、RandomAccessFile類

File類

<a href="http://redking.blog.51cto.com/attachment/200902/24/27212_1235484672u2TO.png"></a>

<a href="http://redking.blog.51cto.com/attachment/200902/24/27212_12354846769Pd6.png"></a>

在JAVA中所有的IO操作全部存放在java.io包中。 

File是唯一一個與檔案本身有關的操作。

在使用File類的構造方法處必須加入一個完整的路徑。 

要求一:可以在F盤上建立一個新的檔案:demo.txt檔案。 

public boolean createNewFile() throws IOException

<a href="http://redking.blog.51cto.com/attachment/200902/24/27212_1235484684WZLV.png"></a>

<a href="http://redking.blog.51cto.com/attachment/200902/24/27212_1235484689jJeA.png"></a>

看下效果:

<a href="http://redking.blog.51cto.com/attachment/200902/24/27212_123548469135Xv.png"></a>

我們發現系統提示非法轉義字元,在前面學習正則時“\”表示轉義,我們需要輸入兩個“\\”即“f:\\demo.txt”

<a href="http://redking.blog.51cto.com/attachment/200902/24/27212_1235484694yTPE.png"></a>

<a href="http://redking.blog.51cto.com/attachment/200902/24/27212_1235484697EMfC.png"></a>

需要進行try/catch處理

<a href="http://redking.blog.51cto.com/attachment/200902/24/27212_1235484700Rw20.png"></a>

現在發現檔案出來了哈~

<a href="http://redking.blog.51cto.com/attachment/200902/24/27212_1235484704aMNt.png"></a>

如果現在再想建立同一個檔案,我們會發現顯示false,因為檔案已經存在,不能再建立同一檔案哈~

<a href="http://redking.blog.51cto.com/attachment/200902/24/27212_1235484706RVqs.png"></a>

能否删除掉demo.txt的檔案呢? 

public boolean delete()

<a href="http://redking.blog.51cto.com/attachment/200902/24/27212_1235484708bBKw.png"></a>

<a href="http://redking.blog.51cto.com/attachment/200902/24/27212_1235484711H4j7.png"></a>

<a href="http://redking.blog.51cto.com/attachment/200902/24/27212_1235484713MeQO.png"></a>

要求: 

如果檔案存在則删除掉檔案,如果檔案不存在,則建立檔案。 

判斷檔案是否存在:public boolean exists()

<a href="http://redking.blog.51cto.com/attachment/200902/24/27212_1235484717Ogit.png"></a>

<a href="http://redking.blog.51cto.com/attachment/200902/24/27212_1235484722Pqsb.png"></a>

注意點: 

如果程式按以上格式寫的話,則會有一個限制: 

· windows:\ 

· linux:/

File類中提供了幾分割符 

public static final String separator

<a href="http://redking.blog.51cto.com/attachment/200902/24/27212_1235484726NF4i.png"></a>

<a href="http://redking.blog.51cto.com/attachment/200902/24/27212_1235484731n04H.png"></a>

public String getPath()

<a href="http://redking.blog.51cto.com/attachment/200902/24/27212_1235484734WTiw.png"></a>

<a href="http://redking.blog.51cto.com/attachment/200902/24/27212_1235484738DFdv.png"></a>

<a href="http://redking.blog.51cto.com/attachment/200902/24/27212_1235484742G33H.png"></a>

判斷給定的路徑是否是一個目錄:public boolean isDirectory()

顯示f:\demo.txt不是目錄哈~

<a href="http://redking.blog.51cto.com/attachment/200902/24/27212_1235484749TNyl.png"></a>

再來看一個:

顯示F:\TL-WN310G&amp; TL-WN350G是目錄哈~

<a href="http://redking.blog.51cto.com/attachment/200902/24/27212_1235484753WnO1.png"></a>

通過這個方法可以判斷給定的路徑是否是目錄哈~

要求可以列出指定目錄下的全部檔案。 

· 傳回完整路徑:public String[] list() ; 

· 傳回全部的File對象:public File listFiles() ;

1、使用字元串數組操作

<a href="http://redking.blog.51cto.com/attachment/200902/24/27212_1235484755wM8n.png"></a>

<a href="http://redking.blog.51cto.com/attachment/200902/24/27212_1235484758Bzl6.png"></a>

可以正常列出F:\資料目錄下的檔案和目錄哈~

<a href="http://redking.blog.51cto.com/attachment/200902/24/27212_12354847626al7.png"></a>

2、使用File類對象數組

<a href="http://redking.blog.51cto.com/attachment/200902/24/27212_12354847661Upn.png"></a>

使用File類可以開出路徑哈~

<a href="http://redking.blog.51cto.com/attachment/200902/24/27212_1235484775CsV9.png"></a>

思考題:

<a href="http://redking.blog.51cto.com/attachment/200902/24/27212_12354847881ahQ.png"></a>

不斷的判斷給定的路徑是否是目錄,如果是目錄,則繼續向下列出,此種題目隻能使用遞歸操作完成。

<a href="http://redking.blog.51cto.com/attachment/200902/24/27212_1235484791KkgE.png"></a>

注意:遞歸操作可能會導緻記憶體洩漏問題~~~

輸入輸出方法

<a href="http://redking.blog.51cto.com/attachment/200902/24/27212_123548480301VE.png"></a>

讀寫過程

RandomAccessFile

假設一個檔案中存放了三組資料: 

AA          80 

BB          90 

CC          99

RandomAccessFile類

public RandomAccessFile(File file, String mode) throws FileNotFoundException 

public RandomAccessFile(File file,               --&gt; File 類的執行個體化對象 

String mode)                                                --&gt; 模式 

throws FileNotFoundException

模式現在主要用兩種: 

· r:隻讀 

· w:隻寫 

· rw:讀寫              --&gt; 如果沒有檔案,寫時,會自動建立。

<a href="http://redking.blog.51cto.com/attachment/200902/24/27212_1235484820A46n.png"></a>

public final void writeBytes(String s) throws IOException 

public final void writeInt(int v) throws IOException

<a href="http://redking.blog.51cto.com/attachment/200902/24/27212_12354848259b1M.png"></a>

<a href="http://redking.blog.51cto.com/attachment/200902/24/27212_1235484828n10D.png"></a>

<a href="http://redking.blog.51cto.com/attachment/200902/24/27212_1235484830nkCJ.png"></a>

現在我們可以寫入資料了,下面我們将其讀出來哈~

實際上讀的時候隻能按byte讀出,byte隻能一個一個的往外讀。

<a href="http://redking.blog.51cto.com/attachment/200902/24/27212_1235484833uoQl.png"></a>

<a href="http://redking.blog.51cto.com/attachment/200902/24/27212_1235484836851k.png"></a>

如果讀完第一個人的資料,則此時指針在第二個人之前,如果繼續往下讀則會讀取第二個人的資料,我們測試一下哈~~

<a href="http://redking.blog.51cto.com/attachment/200902/24/27212_1235484839q71N.png"></a>

<a href="http://redking.blog.51cto.com/attachment/200902/24/27212_1235484843PJXD.png"></a>

如果我們想不讀取第一個人的資料,直接讀取第二個人的資料,看下面哈~~ 

public final byte readByte() throws IOException 

public int skipBytes(int n) throws IOException 

public void seek(long pos) throws IOException

<a href="http://redking.blog.51cto.com/attachment/200902/24/27212_1235484846stG8.png"></a>

看下效果,直接讀取第二個人資料了哈~

<a href="http://redking.blog.51cto.com/attachment/200902/24/27212_1235484849Z0aD.png"></a>

如果要讀取第三個人資料就是跳過16個位元組哈~raf1.skipBytes(16);

<a href="http://redking.blog.51cto.com/attachment/200902/24/27212_12354848528Tux.png"></a>

<a href="http://redking.blog.51cto.com/attachment/200902/24/27212_1235484855mwJD.png"></a>

現在我們是一直往下讀哈,我們要使指針往回讀取資料呢?

<a href="http://redking.blog.51cto.com/attachment/200902/24/27212_1235484858vrcG.png"></a>

<a href="http://redking.blog.51cto.com/attachment/200902/24/27212_1235484860bhcx.png"></a>

雖然此類可以比較靈活的實作讀寫操作,可是也是有缺點的,因為必須知道的其跳的長度。

真正開發中使用的資料讀取類:InputStream、OutputStream、Reader、Writer,下季再見分曉哈~~~~

##############################################################

本文轉自redking51CTO部落格,原文連結:http://blog.51cto.com/redking/132835,如需轉載請自行聯系原作者