「案例1」創建一個新文件
import java.io.*;class hello{ public static void main(String[] args) { File f=new File("D:\\hello.txt");try{ f.createNewFile();}catch (Exception e) { e.printStackTrace();}「運行結果」:
程序運行之后,在d盤下會有一個名字為hello.txt的文件。
「案例2」File類的兩個常量
import java.io.*;class hello{ public static void main(String[] args) { System.out.println(File.separator);System.out.println(File.pathSeparator);}「運行結果」:\;此處多說幾句:有些同學可能認為,我直接在windows下使用\進行分割不行嗎?當然是可以的。但是在linux下就不是\了。所以,要想使得我們的代碼跨平臺,更加健壯,所以,大家都采用這兩個常量吧,其實也多寫不了幾行。呵呵、
現在我們使用File類中的常量改寫上面的代碼:
import java.io.*;class hello{ public static void main(String[] args) { String fileName="D:"+File.separator+"hello.txt";File f=new File(fileName);try{ f.createNewFile();}catch (Exception e) { e.printStackTrace();}你看,沒有多寫多少吧,呵呵。所以建議使用File類中的常量。
刪除一個文件
/** * 刪除一個文件* */ import java.io.*;class hello{ public static void main(String[] args) { String fileName="D:"+File.separator+"hello.txt";File f=new File(fileName);if(f.exists()){ f.delete();}else{ System.out.println("文件不存在");}
}創建一個文件夾
/** * 創建一個文件夾* */ import java.io.*;class hello{ public static void main(String[] args) { String fileName="D:"+File.separator+"hello";File f=new File(fileName);f.mkdir();}「運行結果」:
D盤下多了一個hello文件夾
列出指定目錄的全部文件(包括隱藏文件):
/** * 使用list列出指定目錄的全部文件* */ import java.io.*;class hello{ public static void main(String[] args) { String fileName="D:"+File.separator;File f=new File(fileName);String[] str=f.list();for (int i = 0; i < str.length; i++) { System.out.println(str[i]);}「運行結果」:
$RECYCLE.BIN
360
360Downloads
360Rec
360SoftMove
Config.Msi
da
Downloads
DriversBackup
eclipse
java web整合開發和項目實戰
Lenovo
MSOCache
Program
Program Files
python
RECYGLER.{8F92DA15-A229-A4D5-B5CE-5280C8B89C19}
System Volume Information
Tomcat6
var
vod_cache_data
新建文件夾
(你的運行結果應該和這個不一樣的,呵呵)
但是使用list返回的是String數組,。而且列出的不是完整路徑,如果想列出完整路徑的話,需要使用listFiles.他返回的是File的數組
列出指定目錄的全部文件(包括隱藏文件):
/** * 使用listFiles列出指定目錄的全部文件* listFiles輸出的是完整路徑* */ import java.io.*;class hello{ public static void main(String[] args) { String fileName="D:"+File.separator;File f=new File(fileName);File[] str=f.listFiles();for (int i = 0; i < str.length; i++) { System.out.println(str[i]);}「運行結果」:
D:\$RECYCLE.BIN
D:\360
D:\360Downloads
D:\360Rec
D:\360SoftMove
D:\Config.Msi
D:\da
D:\Downloads
D:\DriversBackup
D:\eclipse
D:\java web整合開發和項目實戰
D:\Lenovo
D:\MSOCache
D:\Program
D:\Program Files
D:\python
D:\RECYGLER.{8F92DA15-A229-A4D5-B5CE-5280C8B89C19}
D:\System Volume Information
D:\Tomcat6
D:\var
D:\vod_cache_data
D:\新建文件夾
通過比較可以指定,使用listFiles更加方便、
判斷一個指定的路徑是否為目錄
/** * 使用isDirectory判斷一個指定的路徑是否為目錄* */ import java.io.*;class hello{ public static void main(String[] args) { String fileName="D:"+File.separator;File f=new File(fileName);if(f.isDirectory()){ System.out.println("YES");}else{ System.out.println("NO");}「運行結果」:YES
搜索指定目錄的全部內容
/** * 列出指定目錄的全部內容* */ import java.io.*;class hello{ public static void main(String[] args) { String fileName="D:"+File.separator;File f=new File(fileName);print(f);} public static void print(File f){ if(f!=null){ if(f.isDirectory()){ File[] fileArray=f.listFiles();if(fileArray!=null){ for (int i = 0; i < fileArray.length; i++) { //遞歸調用print(fileArray[i]);} else{ System.out.println(f);}「運行結果」:
D:\Tomcat6\work\Catalina\localhost\nevel\org\apache\jsp\framepages\web4welcome_jsp.java
D:\Tomcat6\work\Catalina\localhost\nevel\org\apache\jsp\help_005fhome_jsp.class
D:\Tomcat6\work\Catalina\localhost\nevel\org\apache\jsp\help_005fhome_jsp.java
D:\Tomcat6\work\Catalina\localhost\nevel\org\apache\jsp\home_jsp.class
D:\Tomcat6\work\Catalina\localhost\nevel\org\apache\jsp\home_jsp.java
D:\Tomcat6\work\Catalina\localhost\nevel\org\apache\jsp\index_jsp.class
D:\Tomcat6\work\Catalina\localhost\nevel\org\apache\jsp\index_jsp.java
D:\Tomcat6\work\Catalina\localhost\nevel\org\apache\jsp\login_jsp.class
D:\Tomcat6\work\Catalina\localhost\nevel\org\apache\jsp\login_jsp.java
D:\Tomcat6\work\Catalina\localhost\nevel\org\apache\jsp\modify_005fuser_005finfo_jsp.class
D:\Tomcat6\work\Catalina\localhost\nevel\org\apache\jsp\modify_005fuser_005finfo_jsp.java
D:\Tomcat6\work\Catalina\localhost\nevel\org\apache\jsp\register_005fnotify_jsp.class
D:\Tomcat6\work\Catalina\localhost\nevel\org\apache\jsp\register_005fnotify_jsp.java
D:\Tomcat6\work\Catalina\localhost\nevel\org\apache\jsp\sign_005fup_jsp.class
D:\Tomcat6\work\Catalina\localhost\nevel\org\apache\jsp\sign_005fup_jsp.java
D:\Tomcat6\work\Catalina\localhost\nevel\org\apache\jsp\transit_jsp.class
……
「使用RandomAccessFile寫入文件」
/** * 使用RandomAccessFile寫入文件* */ import java.io.*;class hello{ public static void main(String[] args) throws IOException { String fileName="D:"+File.separator+"hello.txt";File f=new File(fileName);RandomAccessFile demo=new RandomAccessFile(f,"rw");demo.writeBytes("asdsad");demo.writeInt(12);demo.writeBoolean(true);demo.writeChar('A');demo.writeFloat(1.21f);demo.writeDouble(12.123);demo.close();}如果你此時打開hello.txt查看的話,會發現那是亂碼。
字節流
「向文件中寫入字符串」
/** * 字節流* 向文件中寫入字符串* */ import java.io.*;class hello{ public static void main(String[] args) throws IOException { String fileName="D:"+File.separator+"hello.txt";File f=new File(fileName);OutputStream out =new FileOutputStream(f);String str="你好";byte[] b=str.getBytes();out.write(b);out.close();}查看hello.txt會看到“你好”
當然也可以一個字節一個字節的寫。
/** * 字節流* 向文件中一個字節一個字節的寫入字符串* */ import java.io.*;class hello{ public static void main(String[] args) throws IOException { String fileName="D:"+File.separator+"hello.txt";File f=new File(fileName);OutputStream out =new FileOutputStream(f);String str="你好";byte[] b=str.getBytes();for (int i = 0; i < b.length; i++) { out.write(b[i]);} out.close();}結果還是:“你好”
向文件中追加新內容:
/** * 字節流* 向文件中追加新內容:* */ import java.io.*;class hello{ public static void main(String[] args) throws IOException { String fileName="D:"+File.separator+"hello.txt";File f=new File(fileName);OutputStream out =new FileOutputStream(f,true);String str="Rollen";//String str="\r\nRollen"; 可以換行byte[] b=str.getBytes();for (int i = 0; i < b.length; i++) { out.write(b[i]);} out.close();}「運行結果」:
你好Rollen
「讀取文件內容」
/** * 字節流* 讀文件內容* */ import java.io.*;class hello{ public static void main(String[] args) throws IOException { String fileName="D:"+File.separator+"hello.txt";File f=new File(fileName);InputStream in=new FileInputStream(f);byte[] b=new byte[1024];in.read(b);in.close();System.out.println(new String(b));}「運行結果」
你好Rollen
Rollen_
但是這個例子讀取出來會有大量的空格,我們可以利用in.read(b);的返回值來設計程序。如下:
/** * 字節流* 讀文件內容* */ import java.io.*;class hello{ public static void main(String[] args) throws IOException { String fileName="D:"+File.separator+"hello.txt";File f=new File(fileName);InputStream in=new FileInputStream(f);byte[] b=new byte[1024];int len=in.read(b);in.close();System.out.println("讀入長度為:"+len);System.out.println(new String(b,0,len));}「運行結果」:
讀入長度為:18
你好Rollen
Rollen
讀者觀察上面的例子可以看出,我們預先申請了一個指定大小的空間,但是有時候這個空間可能太小,有時候可能太大,我們需要準確的大小,這樣節省空間,那么我們可以這樣干:
/** * 字節流* 讀文件內容,節省空間* */ import java.io.*;class hello{ public static void main(String[] args) throws IOException { String fileName="D:"+File.separator+"hello.txt";File f=new File(fileName);InputStream in=new FileInputStream(f);byte[] b=new byte[(int)f.length()];in.read(b);System.out.println("文件長度為:"+f.length());in.close();System.out.println(new String(b));}文件長度為:18
你好Rollen
Rollen
將上面的例子改為一個一個讀:
/** * 字節流* 讀文件內容,節省空間* */ import java.io.*;class hello{ public static void main(String[] args) throws IOException { String fileName="D:"+File.separator+"hello.txt";File f=new File(fileName);InputStream in=new FileInputStream(f);byte[] b=new byte[(int)f.length()];for (int i = 0; i < b.length; i++) { b[i]=(byte)in.read();} in.close();System.out.println(new String(b));}輸出的結果和上面的一樣。
細心的讀者可能會發現,上面的幾個例子都是在知道文件的內容多大,然后才展開的,有時候我們不知道文件有多大,這種情況下,我們需要判斷是否獨到文件的末尾。
/** * 字節流*讀文件* */ import java.io.*;class hello{ public static void main(String[] args) throws IOException { String fileName="D:"+File.separator+"hello.txt";File f=new File(fileName);InputStream in=new FileInputStream(f);byte[] b=new byte[1024];int count =0;int temp=0;while((temp=in.read())!=(-1)){ b[count++]=(byte)temp;} in.close();System.out.println(new String(b));}「運行結果」
你好Rollen
Rollen_
提醒一下,當獨到文件末尾的時候會返回-1.正常情況下是不會返回-1的