一、Flie類的基本用法
java.io.File類:代表檔案和目錄。 在開發中,讀取檔案、生成檔案、删除檔案、修改檔案的屬性時經常會用到本類。
File類的常見構造方法:public File(String pathname)
以pathname為路徑建立File對象,如果pathname是相對路徑,則預設的目前路徑在系統屬性user.dir中存儲,如下示例所示。
示例:檔案的建立
import java.io.File;
public class TestFile1 {
public static void main(String[] args) throws Exception {
System.out.println(System.getProperty("user.dir"));
File f = new File("a.txt"); //相對路徑:預設放到user.dir目錄下面
f.createNewFile();//建立檔案
File f2 = new File("d:/b.txt");//絕對路徑
f2.createNewFile();
}
}
在eclipse項目開發中,user.dir就是本項目的目錄。是以,執行完畢後,在本項目和D盤下都生成了新的檔案(如果是eclipse下,一定按F5重新整理目錄結構才能看到新檔案)。如下圖所示。
通過File對象可以通路檔案的屬性:
示例:測試File類通路屬性的基本用法
import java.io.File;
import java.util.Date;
public class TestFile2 {
public static void main(String[] args) throws Exception {
File f = new File("d:/b.txt");
System.out.println("File是否存在:"+f.exists());
System.out.println("File是否是目錄:"+f.isDirectory());
System.out.println("File是否是檔案:"+f.isFile());
System.out.println("File最後修改時間:"+new Date(f.lastModified()));
System.out.println("File的大小:"+f.length());
System.out.println("File的檔案名:"+f.getName());
System.out.println("File的目錄路徑:"+f.getPath());
}
}
運作結果:
通過File對象建立空檔案或目錄(在該對象所指的檔案或目錄不存在的情況下)
執行個體代碼:
import java.io.File;
import java.io.IOException;
import java.util.Date;
/**
* 測試File類的基本用法
*
*/
public class Test {
public static void main(String[] args) throws IOException {
//擷取系統中的File(如果File是檔案,那麼就是檔案;如果是目錄,那麼就是目錄)
//File f = new File("d:/a.txt");
File f = new File("d:\\a.txt"); //正反斜杠的寫法
System.out.println(f); //隻列印檔案的位址,不會列印檔案内容
//将a.txt重命名為bb.txt
f.renameTo(new File("d:/bb.txt"));
//在eclipse裡跑打開的是eclipse的工作目錄
System.out.println(System.getProperty("user.dir"));
//建立一個新的檔案
File f2 = new File("gg.txt"); //不加目錄,預設建在目前
f2.createNewFile(); //建立新的檔案,抛出異常
System.out.println("File是否存在:"+f2.exists());
System.out.println("File是否是目錄:"+f2.isDirectory());
System.out.println("File是否是檔案:"+f2.isFile());
System.out.println("File最後修改時間:"+new Date(f2.lastModified()));
System.out.println("File的大小:"+f2.length());
System.out.println("File的檔案名:"+f2.getName());
System.out.println("File的目錄路徑:"+f2.getPath()); //目前檔案,直接導出來了
System.out.println("File的目錄路徑:"+f2.getAbsolutePath()); //絕對路徑
}
}
示例:使用mkdir建立目錄
import java.io.File;
public class TestFile3 {
public static void main(String[] args) throws Exception {
File f = new File("d:/c.txt");
f.createNewFile(); // 會在d盤下面生成c.txt檔案
f.delete(); // 将該檔案或目錄從硬碟上删除
File f2 = new File("d:/電影/華語/大陸");
boolean flag = f2.mkdir(); //目錄結構中有一個不存在,則不會建立整個目錄樹
System.out.println(flag);//建立失敗
}
}
運作結果:
示例:使用mkdirs建立目錄
import java.io.File;
public class TestFile4 {
public static void main(String[] args) throws Exception {
File f = new File("d:/c.txt");
f.createNewFile(); // 會在d盤下面生成c.txt檔案
f.delete(); // 将該檔案或目錄從硬碟上删除
File f2 = new File("d:/電影/華語/大陸");
boolean flag = f2.mkdirs();//目錄結構中有一個不存在也沒關系;建立整個目錄樹
System.out.println(flag);//建立成功
}
}
運作結果:
執行個體:File類的綜合應用
import java.io.File;
import java.io.IOException;
public class TestFile5 {
public static void main(String[] args) {
//指定一個檔案
File file = new File("d:/sxt/b.txt");
//判斷該檔案是否存在
boolean flag= file.exists();
//如果存在就删除,如果不存在就建立
if(flag){
//删除
boolean flagd = file.delete();
if(flagd){
System.out.println("删除成功");
}else{
System.out.println("删除失敗");
}
}else{
//建立
boolean flagn = true;
try {
//如果目錄不存在,先建立目錄
File dir = file.getParentFile();
dir.mkdirs();
//建立檔案
flagn = file.createNewFile();
System.out.println("建立成功");
} catch (IOException e) {
System.out.println("建立失敗");
e.printStackTrace();
}
}
//檔案重命名(同學可以自己測試一下)
//file.renameTo(new File("d:/readme.txt"));
}
}
第一次運作結果:
第二次運作結果:
二、遞歸列印目錄樹結構(遞歸周遊目錄結構和樹狀展現)
本節結合前面給大家講的遞歸算法,展示目錄結構。大家可以先建立一個目錄,下面增加幾個子檔案夾或者檔案,用于測試。
示例:使用遞歸算法,以樹狀結構展示目錄樹
import java.io.File;
/**
*
* 使用遞歸算法列印目錄樹
*
*/
public class Test {
public static void main(String[] args) {
File f = new File("d:/電影");
printFile(f, 0);
}
/**
* 列印檔案資訊
* @param file 檔案名稱
* @param level 層次數(實際就是:第幾次遞歸調用)
*/
static void printFile(File file, int level) {
//輸出層次數
for (int i = 0; i < level; i++) {
System.out.print("-");
}
//輸出檔案名
System.out.println(file.getName());
//如果file是目錄,則擷取子檔案清單,并對每個子檔案進行相同的操作
if (file.isDirectory()) {
File[] files = file.listFiles();
for (File temp : files) {
//遞歸調用該方法:注意等+1
printFile(temp, level + 1);
}
}
}
}
運作結果: