File類是java.io包中唯一對檔案本身進行操作的類。它可以進行建立、删除檔案等操作。
可以使用 createNewFille() 建立一個新檔案。
注意:
Windows 中使用反斜杠表示目錄的分隔符"\"。
Linux 中使用正斜杠表示目錄的分隔符"/"。
最好的做法是使用 File.separator 靜态常量,可以根據所在作業系統選取對應的分隔符。
可以使用 delete() 删除一個檔案。
一般删除檔案前,最好先使用 exists() 判斷一下檔案是否存在。
例
示範建立和删除檔案操作
<a></a>
import java.io.File;
import java.io.IOException;
public class FileDemo01 {
public static void createFile(String filepath) {
File f = new File(filepath);
System.out.println("[Create File] " + f.getPath().toString());
try {
f.createNewFile(); // 建立檔案,根據給定的路徑建立
} catch (IOException e) {
e.printStackTrace(); // 輸出異常資訊
}
}
public static void deleteFile(String filepath) {
System.out.println("[Delete File] " + f.getPath().toString());
if(f.exists()){ // 如果檔案存在則删除
f.delete(); // 建立檔案,根據給定的路徑建立
public static void main(String args[]) {
// 注意三種分隔符方式
String path1 = "d:\\test1.txt"; // Windows中使用反斜杠表示目錄的分隔符"\"
String path2 = "d:/test2.txt"; // Linux中使用正斜杠表示目錄的分隔符"/"
String path3 = "d:" + File.separator + "test3.txt"; // 最好的做法是使用File.separator,可以根據所在作業系統選取對應分隔符
createFile(path1);
createFile(path2);
createFile(path3);
deleteFile(path1);
};
運作結果
在D:盤符下,先建立了三個檔案,又删除了第一個檔案。最後剩下test2.txt和test3.txt兩個檔案。
可以使用 mkdir() 來建立檔案夾,但是如果要建立的目錄的父路徑不存在,則無法建立成功。
如果要解決這個問題,可以使用 mkdirs(),當父路徑不存在時,會連同上級目錄都一并建立。
public class FileDemo02 {
File f = new File("d:\\abc\\test"); // 執行個體化File類的對象
f.mkdir(); // 建立檔案夾
// f.mkdirs(); // 建立檔案夾,如果父路徑不存在,會一并建立
上面的例子中,如果用mkdir(),會發現建立目錄失敗;而用mkdirs()則成功。
File中給出了兩種列出檔案夾内容的方法:
list(): 列出全部名稱,傳回一個字元串數組。
listFiles(): 列出完整的路徑,傳回一個File對象數組。
public class FileDemo03 {
public static void testListFiles1(String path) {
File f = new File(path); // 執行個體化File類的對象
String str[] = f.list(); // 列出給定目錄中的内容
System.out.println("[list]");
for (int i = 0; i < str.length; i++) {
System.out.println(str[i]);
public static void testListFiles2(String path) {
File files[] = f.listFiles(); // 列出全部内容
System.out.println("[listFiles]");
for (int i = 0; i < files.length; i++) {
System.out.println(files[i]);
String path = "d:" + File.separator;
testListFiles1(path);
testListFiles2(path);
可以使用 delete() 來删除目錄。
需要注意的是,如果這個目錄不為空,直接用 delete() 删除會失敗。
以下示範了一個删除指定目錄,包括其所有子檔案和子目錄的範例
public class DeleteDirectory {
/**
* 删除空目錄,如果目錄不為空,無法删除
* @param dir
*/
private static void deleteEmptyDir(String dir) {
File f = new File(dir);
boolean success = f.delete();
if (success) {
System.out.println("Success to deleted " + dir);
} else {
System.out.println("Failed to delete " + dir);
* 如果傳入的是一個目錄對象,周遊删除其所有子檔案和子目錄
* @return
private static boolean deleteDir(File dir) {
if (dir.isDirectory()) {
File[] children = dir.listFiles();// 遞歸删除目錄中的子目錄下
for (int i = 0; i < children.length; i++) {
boolean success = deleteDir(children[i]);
if (!success) {
return false;
}
}
// 目錄此時為空,可以删除
return dir.delete();
public static void main(String[] args) {
String emptyDir = "d:\\empty";
String dir2 = "d:\\test";
deleteEmptyDir(emptyDir);
boolean success = deleteDir(new File(dir2));
System.out.println("Success to deleted " + dir2);
System.out.println("Failed to delete " + dir2);
}
RandomAccessFile類是随機讀取類,它是一個完全獨立的類。
它适用于由大小已知的記錄組成的檔案,是以我們可以使用seek()将記錄從一處轉移到另一處,然後讀取或者修改記錄。
檔案中記錄的大小不一定都相同,隻要能夠确定哪些記錄有多大以及它們在檔案中的位置即可。
RandomAccessFile類可以實作對檔案内容的讀寫操作,但是比較複雜。是以一般操作檔案内容往往會使用位元組流或字元流方式。
當用 rw 方式聲明RandomAccessFile對象時,如果要寫入的檔案不存在,系統将自行建立。
r 為隻讀;w 為隻寫;rw 為讀寫。
為了保證可以進行随機讀取,所有寫入的名字都是8個位元組,寫入的數字都是固定的4個位元組。
import java.io.RandomAccessFile;
public class RandomAccessFileDemo01 {
// 所有的異常直接抛出,程式中不再進行處理
public static void main(String args[]) throws Exception {
File f = new File("d:" + File.separator + "test.txt"); // 指定要操作的檔案
RandomAccessFile rdf = null; // 聲明RandomAccessFile類的對象
rdf = new RandomAccessFile(f, "rw");// 讀寫模式,如果檔案不存在,會自動建立
String name = null;
int age = 0;
name = "zhangsan"; // 字元串長度為8
age = 30; // 數字的長度為4
rdf.writeBytes(name); // 将姓名寫入檔案之中
rdf.writeInt(age); // 将年齡寫入檔案之中
name = "lisi "; // 字元串長度為8
age = 31; // 數字的長度為4
name = "wangwu "; // 字元串長度為8
age = 32; // 數字的長度為4
rdf.close(); // 關閉
}
讀取是直接使用 r 的模式即可,以隻讀的方式打開檔案。
讀取時所有的字元串隻能按照byte數組方式讀取出來,而且長度必須和寫入時的固定大小相比對。
public class RandomAccessFileDemo02{
// 所有的異常直接抛出,程式中不再進行處理
public static void main(String args[]) throws Exception{
File f = new File("d:" + File.separator + "test.txt") ; // 指定要操作的檔案
RandomAccessFile rdf = null ; // 聲明RandomAccessFile類的對象
rdf = new RandomAccessFile(f,"r") ;// 以隻讀的方式打開檔案
String name = null ;
int age = 0 ;
byte b[] = new byte[8] ; // 開辟byte數組
// 讀取第二個人的資訊,意味着要空出第一個人的資訊
rdf.skipBytes(12) ; // 跳過第一個人的資訊
for(int i=0;i<b.length;i++){
b[i] = rdf.readByte() ; // 讀取一個位元組
name = new String(b) ; // 将讀取出來的byte數組變為字元串
age = rdf.readInt() ; // 讀取數字
System.out.println("第二個人的資訊 --> 姓名:" + name + ";年齡:" + age) ;
// 讀取第一個人的資訊
rdf.seek(0) ; // 指針回到檔案的開頭
System.out.println("第一個人的資訊 --> 姓名:" + name + ";年齡:" + age) ;
rdf.skipBytes(12) ; // 空出第二個人的資訊
System.out.println("第三個人的資訊 --> 姓名:" + name + ";年齡:" + age) ;
rdf.close() ; // 關閉
第二個人的資訊 --> 姓名:lisi ;年齡:31
第一個人的資訊 --> 姓名:zhangsan;年齡:30
第三個人的資訊 --> 姓名:wangwu ;年齡:32
本文轉自靜默虛空部落格園部落格,原文連結:http://www.cnblogs.com/jingmoxukong/p/4513059.html,如需轉載請自行聯系原作者