越秀網站建設設計自媒體是什么
Java 文件
Java IO教程 - Java文件
File類的對象是文件或目錄的路徑名的抽象表示。
創(chuàng)建文件
我們可以從中創(chuàng)建一個?File?
對象
- 路徑名
- 父路徑名和子路徑名
- URI(統(tǒng)一資源標識符)
我們可以使用File類的以下構造函數(shù)之一創(chuàng)建一個文件:
File(String pathname) File(File parent, String child) File(String parent, String child) File(URI uri)
如果我們有一個文件路徑名字符串test.txt,我們可以創(chuàng)建一個抽象路徑名作為下面的代碼。
File dummyFile = new File("test.txt");
名為test.txt的文件不必存在,以使用此語句創(chuàng)建File對象。
dummyFile對象表示抽象路徑名,它可能指向或可能不指向文件系統(tǒng)中的真實文件。
File類有幾個方法來處理文件和目錄。
使用File對象,我們可以創(chuàng)建新文件,刪除現(xiàn)有文件,重命名文件,更改文件的權限等。
File類中的isFile()和isDirectory()告訴File對象是否表示文件或目錄。
當前工作目錄
JVM的當前工作目錄是根據(jù)我們如何運行java命令來設置的。
我們可以通過讀取user.dir系統(tǒng)屬性來獲取JVM的當前工作目錄,如下所示:
String workingDir = System.getProperty("user.dir");
使用System.setProperty()方法更改當前工作目錄。
System.setProperty("user.dir", "C:\\myDir");
要在Windows上指定C:\\ test作為user.dir系統(tǒng)屬性值,我們運行如下所示的程序:
java -Duser.dir=C:\test your-java-class
文件的存在
我們可以使用File類的exists()方法檢查File對象的抽象路徑名是否存在。
boolean fileExists = dummyFile.exists();
完整源代碼
import java.io.File;public class Main {public static void main(String[] argv) {// Create a File objectFile dummyFile = new File("dummy.txt");// Check for the file"s existenceboolean fileExists = dummyFile.exists();if (fileExists) {System.out.println("The dummy.txt file exists.");} else {System.out.println("The dummy.txt file does not exist.");}} }
上面的代碼生成以下結果。
路徑
絕對路徑在文件系統(tǒng)上唯一標識文件。規(guī)范路徑是唯一標識文件系統(tǒng)上文件的最簡單路徑。
我們可以使用getAbsolutePath()和getCanonicalPath()方法來分別獲得由File對象表示的絕對路徑和規(guī)范路徑。
import java.io.File; import java.io.IOException;public class Main {public static void main(String[] args) {printFilePath("dummy.txt");printFilePath(".." + File.separator + "notes.txt");}public static void printFilePath(String pathname) {File f = new File(pathname);System.out.println("File Name: " + f.getName());System.out.println("File exists: " + f.exists());System.out.println("Absolute Path: " + f.getAbsolutePath());try {System.out.println("Canonical Path: " + f.getCanonicalPath());}catch (IOException e) {e.printStackTrace();}} }
上面的代碼生成以下結果。
文件分隔符
不同的操作系統(tǒng)使用不同的字符來分隔路徑名中的兩個部分。
例如,Windows在路徑名中使用反斜杠(\)作為名稱分隔符,而UNIX使用正斜杠(/)。
File類定義了一個名為分隔符Char的常量,它是系統(tǒng)相關的名稱分隔符。
我們可以使用File.separator Char常量來獲取名稱分隔符作為字符。
File.separator?
常量將我們的名稱分隔符作為String。
在程序中使用名稱分隔符將使您的Java代碼在不同的平臺上工作。
Java 文件操作
Java IO教程 - Java文件操作
文件創(chuàng)建
我們可以使用File類的createNewFile()方法創(chuàng)建一個新文件:
File dummyFile = new File("test.txt"); boolean fileCreated = dummyFile.createNewFile();
該createNewFile()方法創(chuàng)建一個新的空文件,如果有指定名稱的文件不存在。
如果文件已成功創(chuàng)建,則返回true;否則,返回false。如果發(fā)生I/O錯誤,該方法將拋出IOException。
我們還可以在默認的臨時文件目錄或目錄中創(chuàng)建一個臨時文件。要在默認臨時目錄中創(chuàng)建臨時文件,請使用File類的createTempFile()靜態(tài)方法,該方法接受前綴和后綴以生成臨時文件名。
File tempFile = File.createTempFile("abc", ".txt");
文件夾創(chuàng)建
我們可以使用mkdir()或mkdirs()方法創(chuàng)建一個新目錄。
僅當路徑名中指定的父目錄已存在時,mkdir()方法才創(chuàng)建目錄。
File newDir = new File("C:\\users\\home");
只有當C:\users目錄已經存在時,newDir.mkdir()方法才會創(chuàng)建主目錄。
newDir.mkdirs()方法將創(chuàng)建users目錄(如果它不存在于C:驅動器中),它將在C:\users目錄下創(chuàng)建主目錄。
文件刪除
我們需要使用File類的delete()方法來刪除文件/目錄。
目錄必須為空,我們才能刪除它。
如果文件/目錄被刪除,該方法返回true; 否則,返回false。
我們還可以延遲刪除文件,直到JVM通過使用deleteOnExit()方法終止。
如果我們在程序中創(chuàng)建臨時文件,當程序退出時要刪除,這將非常有用。
立即刪除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.txtFile 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。
我們需要檢查返回值,以確保重命名成功。
上面的代碼生成以下結果。
例子
File對象是不可變的。創(chuàng)建后,它始終表示相同的路徑名。當我們重命名文件時,舊的File對象仍然代表原始的路徑名。
File對象表示路徑名,而不是文件系統(tǒng)中的實際文件。
以下代碼顯示了如何進行文件創(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 fileboolean fileCreated = newFile.createNewFile();if (!fileCreated) {System.out.println(newFile + " could not be created.");}printFileDetails(newFile);// Delete the new filenewFile.delete();System.out.println("After deleting the new file:");printFileDetails(newFile);// recreate the filenewFile.createNewFile();printFileDetails(newFile);// Let"s tell the JVM to delete this file on exitnewFile.deleteOnExit();System.out.println("After using deleteOnExit() method:");printFileDetails(newFile);// Create a new file and rename itFile 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());} }
上面的代碼生成以下結果。
文件屬性
File類包含讓我們獲取/設置文件和目錄的屬性的方法。
我們可以設置分別使用setReadOnly(),setReadable(),setWritable()和setExecutable()方法將文件設置為只讀,可讀,可寫和可執(zhí)行。
我們可以使用lastModified()和setLastModified()方法來獲取和設置文件的最后修改日期和時間。
我們可以使用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)中可用根目錄的列表。 它返回一個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()方法返回一個String數(shù)組,而listFiles()方法返回一個File數(shù)組。
我們還可以使用這些方法的文件過濾器從返回的結果中排除一些文件和目錄。
以下代碼顯示如何列出目錄中的所有文件和目錄。
import java.io.File;public class Main {public static void main(String[] args) {// Change the dirPath value to list files from your directoryString 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)");}}} }
上面的代碼生成以下結果。
文件過濾器
要從列表中排除擴展名為.SYS的所有文件,我們可以使用由功能接口FileFilter的實例表示的文件過濾器來實現(xiàn)。
它包含一個accept()方法,它將File作為參數(shù)列出,如果應該列出文件,則返回true。返回false不會列出文件。
以下代碼創(chuàng)建一個文件過濾器,將過濾擴展名為.SYS的文件。
FileFilter filter = file -> {if (file.isFile()) {String fileName = file.getName().toLowerCase();if (fileName.endsWith(".sys")) {return false;}}return true; };
以下代碼創(chuàng)建兩個文件過濾器 - 一個僅過濾文件,另一個僅過濾目錄:
// 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 fileFileFilter 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)");}}} }
上面的代碼生成以下結果。