1.1 文件操作
java.io.File是Java提供的专⻔针对文件操作的类,File是文件与目录路径的一种抽象表示,用于操作文件与目录,不能操作文件内容。
构造File对象
一个File对象通常表示磁盘上一个真实存在的文件或目录,创建File对象时,无论对应的文件与目录是否存在,不会影响File对象的构造。
常用的三个构造File方法
方法 |
描述 |
public File(String pathname) |
通过给定的路径名创建指定的File实例 |
public File(String parent |
String child) 根据指定的父路径与子路径字符串创建File实例 |
public File(File parent |
String child) 根据指定的父路径File与子路径字符串创建新的File实例 |
public static void main(String[] args) { File dir = new File("D://test"); File sourceFile1 = new File("D://test", "source.txt"); File sourceFile2 = new File(dir, "source.txt"); }
|
常用的判断方法
方法 |
描述 |
public boolean exists() |
判断文件或者目录是否存在 |
public boolean isDirectory() |
判断File表示的路径是否是一个目录 |
public boolean isFile() |
判断File表示的路径是否是一个文件 |
public boolean isHidden() |
判断File是否是一个隐藏的文件与路径,即Unix以. 开始命名的文件或目录,Window需要在文件系统中 明确标记是否隐藏。 |
public boolean canRead() |
判断是否可读 |
public boolean canWrite() |
判断是否可写public boolean canExecute() 判断是否可执行 |
public static void main(String[] args) { File hiddenSshDir = new File("D://test/hidden"); System.out.println(hiddenSshDir.isHidden()); System.out.println(hiddenSshDir.isFile()); System.out.println(hiddenSshDir.isDirectory()); System.out.println(hiddenSshDir.exists()); }
|
常用的获取属性方法
方法 |
描述 |
public String getName() |
获取文件名或目录名,如source.txt |
public String getAbsolutePath() |
获取文件或目录绝对路径 |
public String getPath() |
获取文件或目录相对路径,如果构造File时指定的就是绝对路径,则与getAbsolutePath返回内容一致,如果是相对路径,则以系统属性user.dir为目录创建。 |
public long length() |
返回文件内容大小,单位字节。如果File表示的是目录,则返回0。 |
public static void main(String[] args) { File sourceFile = new File("test/dir"); System.out.println(sourceFile.getName()); System.out.println(sourceFile.getAbsolutePath()); System.out.println(sourceFile.getParent()); System.out.println(sourceFile.getPath()); System.out.println(sourceFile.length()); }
|
操作文件方法
方法 描述 public boolean createNewFile() 创建文件,如果文件已经存在,则返回false。 public boolean mkdir() 创建目录 public boolean mkdirs()
|
创建目录,父路径中任何一级目录不存在都会自动创 建,类似mkdir -p /data/test/dir 命令 public boolean delete() 删除文件或目录,如果File是一个目录,并且目录不 为空,则无法删除, 文件或目录正被其他程序使 用,也无法删除。 public boolean renameTo(File dest) 重命名文件,即移动文件
|
创建文件或目录
public static void main(String[] args) throws IOException { File file = new File("D://test/txt"); boolean suc = file.createNewFile(); System.out.println(suc); suc = file.createNewFile(); System.out.println(suc); suc = file.mkdir(); System.out.println(suc);
File dir = new File("D://test/a/b/c"); suc = dir.mkdir(); System.out.println(suc); suc = dir.mkdirs(); System.out.println(suc); }
|
重命名文件,将D://test/source.txt移动到D://test/sub目录,并命名为b.txt。
public static void main(String[] args) { File source = new File("D://test/source.txt"); File dir = new File("D://test/sub"); dir.mkdir(); File target = new File("D://test/sub/b.txt"); System.out.println(source.renameTo(target)); }
|
创建临时文件
File提供了一个静态方法创建临时文件
public static File createTempFile(String prefix, String suffix)
public static File createTempFile(String prefix, String suffix, File directory)
|
创建临时文件时,可以指定系统临时目录,File类默认使用系统属性java.io.tmpdir( java -
XshowSettings:properties -version 查看)值作为临时目录,后缀未填写则默认为.tmp。
public static void main(String[] args) throws IOException { Properties properties = System.getProperties(); properties.forEach((k,v) -> System.out.println(k + "=" + v)); System.out.println(File.createTempFile("test-", ".log")); }
|
遍历文件目录
方法 |
描述 |
public String[] list() |
返回目录下子文件与子目录名,不是目录直接返回null |
public String[] list(FilenameFilter filter) |
返回目录下符合文件名条件的子文件与子目录字符串名 |
public File[] listFiles() |
与list方法类似,返回类型是File数组 |
public File[] listFiles(FilenameFilter filter) |
返回目录下符合文件名条件的子文件或子目录File数组 |
public File[] listFiles(FileFilter filter) |
返回目录下符合条件的子文件或子目录File数组 |
删除指定目录下的所有.txt文件
public static void main(String[] args) { File file = new File("D://test"); File[] files = file.listFiles((dir, name) -> name.endsWith(".txt")); if (files != null) { for (File f : files) { f.delete(); } } }
|
删除目录,如果目录不为空,则需先遍历删除子文件、子目录
D:\test>tree /f │ 1.log │ ├─a │ a.txt │ └─b └─c c.txt
|
删除D://test目录
public class DeleteDirectoryDemo {
public static void main(String[] args) { File file = new File("D://test"); deleteFile(file); }
public static void deleteFile(File file) { if (!file.exists()) { return; } if (file.isFile()) { if (!file.delete()) { System.out.println("failed to delete file: " + file.getAbsolutePath()); } return; } File[] files = file.listFiles(); if (Objects.nonNull(files) && files.length > 0) { for (File f : files) { deleteFile(f); } } if (!file.delete()) { System.out.println("failed to delete directory: " + file.getAbsolutePath()); } } }
|
Files
从Java7开始,在java.nio.file包下提供了一个文件或者目录操作工具类Files,F iles的方法基本都是静
态方法,该类不仅能操作文件,还能结合IO流操作文件内容。与File类相比,Files的很多方法都能明确
的返回操作失败的异常信息,而不是只返回简单的true或者false。
如test目录不存在时直接使用Files创建source.txt
// Exception in thread "main" java.nio.file.NoSuchFileException: D:\test\source.txt Files.createFile(Paths.get("D://test/source.txt"));
|
删除不存在的文件
// Exception in thread "main" java.nio.file.NoSuchFileException: D:\test\1.txt Files.delete(Paths.get("D://test/1.txt"));
|
Files提供了非常丰富的方法,按功能分为如下几类方法