我們可以使用File類的createNewFile()方法創(chuàng)建一個(gè)新文件:
File dummyFile = new File("test.txt"); boolean fileCreated = dummyFile.createNewFile();
該createNewFile()方法創(chuàng)建一個(gè)新的空文件,如果有指定名稱的文件不存在。
如果文件已成功創(chuàng)建,則返回true;否則,返回false。如果發(fā)生I/O錯(cuò)誤,該方法將拋出IOException。
我們還可以在默認(rèn)的臨時(shí)文件目錄或目錄中創(chuàng)建一個(gè)臨時(shí)文件。要在默認(rèn)臨時(shí)目錄中創(chuàng)建臨時(shí)文件,請使用File類的createTempFile()靜態(tài)方法,該方法接受前綴和后綴以生成臨時(shí)文件名。
File tempFile = File.createTempFile("abc", ".txt");
我們可以使用mkdir()或mkdirs()方法創(chuàng)建一個(gè)新目錄。
僅當(dāng)路徑名中指定的父目錄已存在時(shí),mkdir()方法才創(chuàng)建目錄。
File newDir = new File("C:\\users\\home");
只有當(dāng)C:\users目錄已經(jīng)存在時(shí),newDir.mkdir()方法才會(huì)創(chuàng)建主目錄。
newDir.mkdirs()方法將創(chuàng)建users目錄(如果它不存在于C:驅(qū)動(dòng)器中),它將在C:\users目錄下創(chuàng)建主目錄。
我們需要使用File類的delete()方法來刪除文件/目錄。
目錄必須為空,我們才能刪除它。
如果文件/目錄被刪除,該方法返回true; 否則,返回false。
我們還可以延遲刪除文件,直到JVM通過使用deleteOnExit()方法終止。
如果我們在程序中創(chuàng)建臨時(shí)文件,當(dāng)程序退出時(shí)要?jiǎng)h除,這將非常有用。
立即刪除dummy.txt文件
File dummyFile = new File("dummy.txt"); dummyFile.delete();
在JVM終止時(shí)刪除dummy.txt文件
File dummyFile = new File("dummy.txt"); dummyFile.deleteOnExit();
要重命名文件,我們可以使用renameTo()方法,它使用一個(gè)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。
我們需要檢查返回值,以確保重命名成功。
上面的代碼生成以下結(jié)果。
File對象是不可變的。創(chuàng)建后,它始終表示相同的路徑名。當(dāng)我們重命名文件時(shí),舊的File對象仍然代表原始的路徑名。
File對象表示路徑名,而不是文件系統(tǒng)中的實(shí)際文件。
以下代碼顯示了如何進(jìn)行文件創(chuàng)建,刪除和重命名。
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()); } }
上面的代碼生成以下結(jié)果。
File類包含讓我們獲取/設(shè)置文件和目錄的屬性的方法。
我們可以設(shè)置分別使用setReadOnly(),setReadable(),setWritable()和setExecutable()方法將文件設(shè)置為只讀,可讀,可寫和可執(zhí)行。
我們可以使用lastModified()和setLastModified()方法來獲取和設(shè)置文件的最后修改日期和時(shí)間。
我們可以使用isHidden()方法檢查文件是否被隱藏。
我們可以使用File類的length()方法獲取文件的大小(以字節(jié)為單位)。
File myFile = new File("myfile.txt"); long fileLength = myFile.length();
如果File對象表示不存在的文件,則length()方法返回零。
length()方法的返回類型是long,而不是int。
我們可以使用File類的listRoots()靜態(tài)方法獲取文件系統(tǒng)中可用根目錄的列表。 它返回一個(gè)File對象數(shù)組。
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()方法返回一個(gè)String數(shù)組,而listFiles()方法返回一個(gè)File數(shù)組。
我們還可以使用這些方法的文件過濾器從返回的結(jié)果中排除一些文件和目錄。
以下代碼顯示如何列出目錄中的所有文件和目錄。
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)"); } } } }
上面的代碼生成以下結(jié)果。
要從列表中排除擴(kuò)展名為.SYS的所有文件,我們可以使用由功能接口FileFilter的實(shí)例表示的文件過濾器來實(shí)現(xiàn)。
它包含一個(gè)accept()方法,它將File作為參數(shù)列出,如果應(yīng)該列出文件,則返回true。返回false不會(huì)列出文件。
以下代碼創(chuàng)建一個(gè)文件過濾器,將過濾擴(kuò)展名為.SYS的文件。
FileFilter filter = file -> { if (file.isFile()) { String fileName = file.getName().toLowerCase(); if (fileName.endsWith(".sys")) { return false; } } return true; };
以下代碼創(chuàng)建兩個(gè)文件過濾器 - 一個(gè)僅過濾文件,另一個(gè)僅過濾目錄:
// 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)"); } } } }
上面的代碼生成以下結(jié)果。
更多建議: