可以使用File
類的createNewFile()
方法建立一個新檔案:
File dummyFile = new File("test.txt");
boolean fileCreated = dummyFile.createNewFile();
如果具有指定名稱的檔案尚不存在,createNewFile()
方法將建立一個新的空檔案。如果檔案已成功建立則返回true
; 否則返回false
。 如果發生I/O
錯誤,該方法將丟擲IOException
。
還可以在預設的臨時檔案目錄或目錄中建立一個臨時檔案。要在預設臨時目錄中建立臨時檔案,請使用File
類的createTempFile()
靜態方法,該方法接受字首和字尾以生成臨時檔案名。
File tempFile = File.createTempFile("abc", ".txt");
可以使用mkdir()
或mkdirs()
方法建立一個新目錄。僅當路徑名中指定的父目錄已存在時,mkdir()
方法才建立目錄。
File newDir = new File("C:\\users\\home");
只有當C:\users
目錄已經存在時,newDir.mkdir()
方法才會建立home
目錄。newDir.mkdirs()
方法將建立users
目錄(如果它不存在於C:
驅動器中),它將在C:\ users
目錄下建立home
目錄,也就是說不管C:\\users
目錄存在不存在,都會直接建立home
目錄。
要使用File
類的delete()
方法來刪除檔案/目錄。目錄必須為空時才能刪除它。如果檔案/目錄被刪除,該方法返回true
; 否則返回false
。還可以延遲刪除檔案,直到JVM通過使用deleteOnExit()
方法終止。
如果在程式中建立臨時檔案,比如在程式退出時刪除這些臨時檔案,這是非常有用的。立即刪除dummy.txt
檔案,如下程式碼 -
File dummyFile = new File("dummy.txt");
dummyFile.delete();
在JVM終止時刪除dummy.txt
檔案
File dummyFile = new File("dummy.txt");
dummyFile.deleteOnExit();
要重新命名檔案,可以使用renameTo()
方法,它使用一個File
物件來表示新檔案:
boolean fileRenamed = oldFile.renameTo(newFile);
完整的原始碼範例 -
import java.io.File;
public class Main {
public static void main(String[] argv) {
// Rename old-dummy.txt to new_dummy.txt
File oldFile = new File("old_dummy.txt");
File newFile = new File("new_dummy.txt");
boolean fileRenamed = oldFile.renameTo(newFile);
if (fileRenamed) {
System.out.println(oldFile + " renamed to " + newFile);
} else {
System.out.println("Renaming " + oldFile + " to " + newFile
+ " failed.");
}
}
}
如果檔案的重新命名成功,renameTo()
方法返回true
; 否則返回false
。需要檢查返回值,以確保重新命名成功。
上面的程式碼生成以下結果。
Renaming old_dummy.txt to new_dummy.txt failed.
File
物件是不可變的。 建立後它始終表示相同的路徑名。當重新命名檔案時,舊的File
物件仍然代表原始的路徑名。File
物件表示路徑名,而不是檔案系統中的實際檔案。以下程式碼顯示了如何進行檔案建立,刪除和重新命名。
import java.io.File;
public class Main {
public static void main(String[] args) throws Exception {
File newFile = new File("my_new_file.txt");
printFileDetails(newFile);
// Create a new file
boolean fileCreated = newFile.createNewFile();
if (!fileCreated) {
System.out.println(newFile + " could not be created.");
}
printFileDetails(newFile);
// Delete the new file
newFile.delete();
System.out.println("After deleting the new file:");
printFileDetails(newFile);
// recreate the file
newFile.createNewFile();
printFileDetails(newFile);
// Let's tell the JVM to delete this file on exit
newFile.deleteOnExit();
System.out.println("After using deleteOnExit() method:");
printFileDetails(newFile);
// Create a new file and rename it
File firstFile = new File("my_first_file.txt");
File secondFile = new File("my_second_file.txt");
fileCreated = firstFile.createNewFile();
if (fileCreated || firstFile.exists()) {
printFileDetails(firstFile);
printFileDetails(secondFile);
boolean renamedFlag = firstFile.renameTo(secondFile);
if (!renamedFlag) {
System.out.println("Could not rename " + firstFile);
}
printFileDetails(firstFile);
printFileDetails(secondFile);
}
}
public static void printFileDetails(File f) {
System.out.println("Absolute Path: " + f.getAbsoluteFile());
System.out.println("File exists: " + f.exists());
}
}
上面的程式碼生成以下結果。
Absolute Path: F:\website\yiibai\worksp\my_new_file.txt
File exists: false
Absolute Path: F:\website\yiibai\worksp\my_new_file.txt
File exists: true
After deleting the new file:
Absolute Path: F:\website\yiibai\worksp\my_new_file.txt
File exists: false
Absolute Path: F:\website\yiibai\worksp\my_new_file.txt
File exists: true
After using deleteOnExit() method:
Absolute Path: F:\website\yiibai\worksp\my_new_file.txt
File exists: true
Absolute Path: F:\website\yiibai\worksp\my_first_file.txt
File exists: true
Absolute Path: F:\website\yiibai\worksp\my_second_file.txt
File exists: false
Absolute Path: F:\website\yiibai\worksp\my_first_file.txt
File exists: false
Absolute Path: F:\website\yiibai\worksp\my_second_file.txt
File exists: true
File
類包含可獲取/設定檔案和目錄的屬性的方法。可以分別使用setReadOnly()
,setReadable()
,setWritable()
和setExecutable()
方法將檔案設定為唯讀,可讀,可寫和可執行。
也可以使用lastModified()
和setLastModified()
方法來獲取和設定檔案的最後修改日期和時間。使用isHidden()
方法檢查檔案是否被隱藏。
可以使用File
類的length()
方法獲取檔案的大小(以位元組為單位)。如下程式碼 -
File myFile = new File("myfile.txt");
long fileLength = myFile.length();
如果File
物件表示不存在的檔案,則length()
方法返回零。length()
方法的返回型別是long
,而不是int
。
可以使用File
類的listRoots()
靜態方法獲取檔案系統中可用根目錄的列表。它返回一個File
物件陣列。
File[] roots = File.listRoots();
以下程式碼顯示如何列出所有可用的根目錄。
import java.io.File;
public class Main {
public static void main(String[] args) {
File[] roots = File.listRoots();
System.out.println("List of root directories:");
for (File f : roots) {
System.out.println(f.getPath());
}
}
}
可以使用File
類的list()
或listFiles()
方法列出目錄中的所有檔案和目錄。list()
方法返回一個String
陣列,而listFiles()
方法返回一個File
陣列。
還可以使用這些方法作為檔案過濾器從返回的結果中排除一些檔案和目錄。以下程式碼顯示如何列出目錄中的所有檔案和目錄。
import java.io.File;
public class Main {
public static void main(String[] args) {
// Change the dirPath value to list files from your directory
String dirPath = "C:\\";
File dir = new File(dirPath);
File[] list = dir.listFiles();
for (File f : list) {
if (f.isFile()) {
System.out.println(f.getPath() + " (File)");
} else if (f.isDirectory()) {
System.out.println(f.getPath() + " (Directory)");
}
}
}
}
上面的程式碼生成以下結果。
C:\$GetCurrent (Directory)
C:\$RECYCLE.BIN (Directory)
C:\.rnd (File)
C:\AVScanner.ini (File)
C:\Boot (Directory)
C:\bootmgr (File)
C:\BOOTNXT (File)
C:\BOOTSECT.BAK (File)
C:\Documents and Settings (Directory)
C:\drivers (Directory)
C:\file-for-download.txt (File)
C:\grldr (File)
C:\grldr.bak (File)
C:\HaxLogs.txt (File)
C:\inetpub (Directory)
C:\Intel (Directory)
C:\LibAntiPrtSc_ERROR.log (File)
C:\LibAntiPrtSc_INFORMATION.log (File)
C:\mydata (Directory)
C:\OKDOS (Directory)
C:\okldr (File)
C:\okldr.mbr (File)
C:\oraclebackup (Directory)
C:\PerfLogs (Directory)
C:\Program Files (Directory)
C:\Program Files (x86) (Directory)
C:\ProgramData (Directory)
C:\Python27 (Directory)
C:\Python34 (Directory)
C:\Recovery (Directory)
C:\report.rpt (File)
C:\setup.log (File)
C:\setupinfidb.db (File)
C:\swapfile.sys (File)
C:\System Volume Information (Directory)
C:\TEMP (Directory)
C:\Tencent (Directory)
C:\Users (Directory)
C:\Windows (Directory)
C:\Windows10Upgrade (Directory)
要從列表中排除擴充套件名為.SYS
的所有檔案,可以使用由FileFilter
介面的範例表示的檔案過濾器來實現。
它包含一個accept()
方法,它將File
作為引數列出,如果有檔案列出則返回true
。 返回false
不會列出檔案。
以下程式碼建立一個檔案過濾器,將過濾擴充套件名為.SYS
的檔案。
FileFilter filter = file -> {
if (file.isFile()) {
String fileName = file.getName().toLowerCase();
if (fileName.endsWith(".sys")) {
return false;
}
}
return true;
};
以下程式碼建立兩個檔案過濾器 - 一個僅過濾檔案,另一個僅過濾目錄:
// Filters only files
FileFilter fileOnlyFilter = File::isFile;
// Filters only directories
FileFilter dirOnlyFilter = File::isDirectory;
以下程式碼顯示如何使用FileFilter
過濾檔案。
import java.io.File;
import java.io.FileFilter;
public class Main {
public static void main(String[] args) {
String dirPath = "C:\\";
File dir = new File(dirPath);
// Create a file filter to exclude any .SYS file
FileFilter filter = file -> {
if (file.isFile()) {
String fileName = file.getName().toLowerCase();
if (fileName.endsWith(".sys")) {
return false;
}
}
return true;
};
File[] list = dir.listFiles(filter);
for (File f : list) {
if (f.isFile()) {
System.out.println(f.getPath() + " (File)");
} else if (f.isDirectory()) {
System.out.println(f.getPath() + " (Directory)");
}
}
}
}
上面的程式碼生成以下結果。
C:\$GetCurrent (Directory)
C:\$RECYCLE.BIN (Directory)
C:\.rnd (File)
C:\AVScanner.ini (File)
C:\Boot (Directory)
C:\bootmgr (File)
C:\BOOTNXT (File)
C:\BOOTSECT.BAK (File)
C:\Documents and Settings (Directory)
C:\drivers (Directory)
C:\file-for-download.txt (File)
C:\grldr (File)
C:\grldr.bak (File)
C:\HaxLogs.txt (File)
C:\inetpub (Directory)
C:\Intel (Directory)
C:\LibAntiPrtSc_ERROR.log (File)
C:\LibAntiPrtSc_INFORMATION.log (File)
C:\mydata (Directory)
C:\OKDOS (Directory)
C:\okldr (File)
C:\okldr.mbr (File)
C:\oraclebackup (Directory)
C:\PerfLogs (Directory)
C:\Program Files (Directory)
C:\Program Files (x86) (Directory)
C:\ProgramData (Directory)
C:\Python27 (Directory)
C:\Python3 (Directory)
C:\Python34 (Directory)
C:\Recovery (Directory)
C:\report.rpt (File)
C:\SecurityScanner.dll (File)
C:\setup.log (File)
C:\setupinfidb.db (File)
C:\System Volume Information (Directory)
C:\TEMP (Directory)
C:\Tencent (Directory)
C:\Users (Directory)
C:\Windows (Directory)
C:\Windows10Upgrade (Directory)