文件创建
可以使用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)