在API的java.io包中有一個類File,此類主要定義了一些關於java虛擬機訪問文件、文件屬性、操作文件的方法等。
-
其構造函數有: File(File parent, String child) 從父抽象路徑名和子路徑名字符串創建新的 File實例。 File(String pathname) 通過將給定的路徑名字符串轉換爲抽象路徑名來創建新的 File實例。 File(String parent, String child) 從父路徑名字符串和子路徑名字符串創建新的 File實例。 File(URI uri) 通過將給定的 file: URI轉換爲抽象路徑名來創建新的 File實例。
//可以將已經存在的,或者不存在的文件或者目錄封裝成file對象 例如將 路徑 D:\\a.txt封裝成爲路徑
File file = new File("D:\\a.txt");// File(String pathname)
File file1 = new File("D:\\","a.txt");//File(String parent, String child)
File file2 = new File("D:\\");
File file21 = new File(file2,"a.txt");// File(File parent, String child)
-
其字段主要有 static String pathSeparator 與系統相關的路徑分隔符字符,爲方便起見,表示爲字符串。 static char pathSeparatorChar 與系統相關的路徑分隔符。 static String separator 與系統相關的默認名稱 - 分隔符字符,以方便的方式表示爲字符串。 static char separatorChar 與系統相關的默認名稱分隔符。
可以看出,其字段都是與分隔符有關的,以前我們使用系統路徑分隔符通過System.getProperty(“file.separator”),而在File類裏面特意對其進行了封裝
String fileSeparator = System.getProperty("file.separator");
File file = new File("D:"+fileSeparator+"a.txt");
//改寫爲
File file2 = new File("D:"+File.separator+"a.txt");
-
其常見方法有 獲取文件名稱 getName(); 獲取文件路徑 getPath(); getAbsolutePath(); 獲取文件大小 length(); 獲取文件修改時間 lastModified(); 創建文件 createNewFile(); 刪除文件 delete(); 創建目錄 mkdir(); 刪除目錄 delete(); 文件是否存在 exists(); 是否是文件 isFile(); 是否是目錄 isDirectory(); 重命名 renameTo(File dest) 列出可用的文件系統根(盤符) listRoots(); 剩餘空間 getFreeSpace() 總空間 getTotalSpace() 可用空間 getUsableSpace()
File file = new File("txt.txt");
String name = file.getName();
System.out.println("文件名:" + name);
String path = file.getPath();
System.out.println("文件路徑:" + path);
String absolutePath = file.getAbsolutePath();
System.out.println("文件絕對路徑:" + absolutePath);
long length = file.length();
System.out.println("文件大小"+length);
long time = file.lastModified();
//System.out.println("最後修改時間"+time);
Date date = new Date(time);
DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG,DateFormat.LONG);
String dateString = dateFormat.format(date);
System.out.println("最後修改時間"+dateString);
//創建文件 如果文件不存在,則創建,文件存在,則不創建
File file = new File("file.txt");
boolean b = file.createNewFile();
System.out.println("b:" + b);
boolean d = file.delete();
System.out.println(d);
File dirFile = new File("abc");
boolean bDir = dirFile.mkdir();//創建目錄
dirFile.delete();//刪除目錄
System.out.println(bDir);
dirFile = new File("abc\\ab\\a");
dirFile.mkdirs();//創建多級目錄
//刪除多級目錄需要迭代刪除,刪除一次只能刪除最裏面的一級目錄
File file = new File("txt.txt");
file.mkdir();//創建一個文件夾 名字爲txt.txt
boolean b = file.exists();//文件是否存在
System.out.println(b);
//最好先判斷文件是否存在
System.out.println(file.isFile());//是否是文件
System.out.println(file.isDirectory());//是否是目錄
File file1 = new File("txt.txt");//已經存在的文件
File file2 = new File("txt1.txt");
file1.renameTo(file2);//將txt.txt重命名爲txt1.txt
File file3 = new File("D:\\1.txt");
file2.renameTo(file3);//將txt1.txt剪切到D盤並重命名爲1.txt
File[] fileList = File.listRoots();//列出可用的文件系統根(盤符)
for (int i = 0; i < fileList.length; i++)
{
System.out.println(fileList[i]);
}
File file = new File("D:\\");
System.out.println(file.getFreeSpace());//剩餘空
System.out.println(file.getTotalSpace());//總空間
System.out.println(file.getUsableSpace());//可用空間
String[] list()
返回一個字符串數組,命名由此抽象路徑名錶示的目錄中的文件和目錄。
String[] list(FilenameFilter filter)
返回一個字符串數組,命名由此抽象路徑名錶示的目錄中滿足指定過濾器的文件和目錄。
/*
* 獲取當前目錄下的文件以及文件夾的名稱,包含隱藏文件
* 調用list方法的File對象中封裝的必須是目錄
* 否則會發生空指針異常
* 如果訪問的是系統級目錄也會發生空指針異常
* 如果目錄存在但是沒有內容,會返回一個長度爲0的數組。
* */
File file = new File("C:\\");
String[] list = file.list();//獲取當前目錄下所有的文件
for (int i = 0; i < list.length; i++)
{
System.out.println(list[i]);
}
public class Test
{
public static void main(String[] args) throws Exception
{
fileList("E:\\",".jpg");
}
/**
* 遍歷某目錄下的某後綴的文件
* @param path 文件目錄
* @param suffix 後綴
*/
public static void fileList(String path,String suffix)
{
File file = new File(path);
String[] files = file.list(new Filter(suffix));
for (int i = 0; i < files.length; i++) {
System.out.println(files[i]);
}
}
}
/**
* 用於實現FilenameFilter接口的類的實例用於過濾文件名
*/
class Filter implements FilenameFilter
{
String suffix;
public Filter(String suffix) {
this.suffix = suffix;
}
@Override
public boolean accept(File dir, String name) {
return name.endsWith(suffix);
}
}
File[] listFiles(FileFilter filter)
返回一個抽象路徑名數組,表示由此抽象路徑名錶示的滿足指定過濾器的目錄中的文件和目錄。
File[] listFiles(FilenameFilter filter)
返回一個抽象路徑名數組,表示由此抽象路徑名錶示的滿足指定過濾器的目錄中的文件和目錄。
public class Test
{
public static void main(String[] args) throws Exception
{
fileList("E:\\",".jpg");
}
/**
* 遍歷某目錄下的某後綴的文件
* @param path 文件目錄
* @param suffix 後綴
*/
public static void fileList(String path,String suffix)
{
File file = new File(path);
File[] files = file.listFiles(new Filter(suffix));
for (int i = 0; i < files.length; i++) {
System.out.println(files[i]);
}
}
}
/**
* 用於實現FilenameFilter接口的類的實例用於過濾文件名
*/
class Filter implements FilenameFilter
{
String suffix;
public Filter(String suffix) {
this.suffix = suffix;
}
@Override
public boolean accept(File dir, String name) {
return name.endsWith(suffix);
}
}
public class Test
{
public static void main(String[] args) throws Exception
{
fileList("D:\\");
}
/**
* 遍歷某目錄下的某後綴的文件
* @param path 文件目錄
*/
public static void fileList(String path)
{
File file = new File(path);
File[] files = file.listFiles(new Filter());
for (int i = 0; i < files.length; i++) {
System.out.println(files[i]);
}
}
}
/**
* 實現FileFilter接口的類的實例用於過濾隱藏文件
*/
class Filter implements FileFilter
{
@Override
public boolean accept(File pathname) {
return !pathname.isHidden();
}
}
深度遍歷:對指定目錄進行所有內容的列出(包含字目錄的內容)
public static void main(String[] args)
{
File file = new File("D:\\JAVA_jar\\c3p0-0.9.5.2");
//判斷此目錄是否存在
boolean exists = file.exists();
if(exists)//存在
{
deepFile(file);
}
}
/**
* 遍歷文件夾下所有的文件
* @param file 需要遍歷的路徑
*/
public static void deepFile(File file)
{
File[] files = file.listFiles();
for (int i = 0; i < files.length; i++) {
if(files[i].isDirectory())//是目錄
{
deepFile(files[i]);
}
System.out.println(files[i]);
}
}
刪除一個帶內容的目錄
public static void main(String[] args)
{
File file = new File("D:\\c3p0-0.9.5.2");
//判斷此目錄是否存在
boolean exists = file.exists();
if(exists)//存在
{
removeDir(file);
}
}
/**
* 刪除一個帶內容的目錄
* @param file 需要刪除的文件
*/
public static void removeDir(File file)
{
File[] files = file.listFiles();
for (File file2 : files) {
if(file2.isDirectory())
{
removeDir(file2);
}
file2.delete();
}
}