Java 学习笔记 - IO篇:文件与目录
Posted 笑虾
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java 学习笔记 - IO篇:文件与目录相关的知识,希望对你有一定的参考价值。
Java 学习笔记 - IO篇:文件与目录
File 介绍
- File 作为一个工具类,没有太多要学习的东西。把方法过一遍知道它能干啥,到于默认没有给解决方案的遍历操作,也给出了参考示例。
文件
和目录
路径名的抽象
表示形式。(所以它操作的都是对文件的描述
,而不是文件内容
。)- 可用于
文件、目录
的创建、删除
。mkdirs
可创建多级目录。但默认无递归删除
目录的方法。 - 可以获取
目录内容列表
,用于遍历
。 - 可以判断:
存在
、可读
、可写
、是文件
、是目录
、可见
- 复制功能看参考资料
- 另外
Java7
加了新工具类 java.nio.file.Files 对文件操作进行了增加,除了没有抢File
作为文件抽象的工作。
增删改查
都能做。- 还能
复制、移动
文件。 - 在
Java8
时,又给它加了一个static Stream<String> lines(Path path)
,配合流按行读取
文本非常方便(它还有一个指定字符集的重载)。
所以跟牛夫人说拜拜吧。
增删改
方法 | 说明 |
---|---|
boolean mkdir() | 创建此抽象路径名指定的目录。 |
boolean mkdirs() | 创建此抽象路径名指定的目录,包括所有必需但不存在的父目录。 |
boolean createNewFile() | 当且仅当不存在具有此抽象路径名指定名称的文件时,不可分地创建一个新的空文件。 |
static File createTempFile(String prefix, String suffix) | 在默认临时文件目录中创建一个空文件,使用给定前缀和后缀生成其名称。 |
static File createTempFile(String prefix, String suffix, File directory) | 在指定目录中创建一个新的空文件,使用给定的前缀和后缀字符串生成其名称。 |
boolean delete() | 删除此抽象路径名表示的文件或目录。 |
void deleteOnExit() | 在虚拟机终止时,请求删除此抽象路径名表示的文件或目录。 |
boolean renameTo(File dest) | 重新命名此抽象路径名表示的文件。 |
boolean setLastModified(long time) | 设置此抽象路径名指定的文件或目录的最后一次修改时间。 |
递归删除 Java7 Files
注意别写错路径啊,真的会删光的!!!
/**
* 递归删除整个文件夹内容
* java7 的 Files.walkFileTree + FileVisitor 实现。
*/
private static void recursionDelByFilesWalkFileTree(Path dir) throws IOException
Files.walkFileTree(dir, new SimpleFileVisitor<Path>()
@Override
public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException
file.toFile().setWritable(true); // 解决只读文件删不动的问题
Files.delete(file); // 删除
return FileVisitResult.CONTINUE;
@Override
public FileVisitResult postVisitDirectory(Path dir, IOException exc) throws IOException
dir.toFile().setWritable(true); // 解决只读文件删不动的问题
Files.delete(dir); // 删除
return FileVisitResult.CONTINUE;
);
@Test
public void recursionDelTest() throws IOException
Path dir = Paths.get("E:\\\\jerry\\\\test\\\\temp\\\\aa\\\\bb\\\\cc\\\\dd"); // 但愿你的系统没装在这个目录下。
recursionDelByFilesWalkFileTree(dir);
状态检测
方法 | 说明 |
---|---|
boolean canExecute() | 测试应用程序是否可以执行此抽象路径名表示的文件。 |
boolean canRead() | 测试应用程序是否可以读取此抽象路径名表示的文件。 |
boolean canWrite() | 测试应用程序是否可以修改此抽象路径名表示的文件。 |
boolean equals(Object obj) | 测试此抽象路径名与给定对象是否相等。 |
boolean exists() | 测试此抽象路径名表示的文件或目录是否存在。 |
boolean isAbsolute() | 测试此抽象路径名是否为绝对路径名。 |
boolean isDirectory() | 测试此抽象路径名表示的文件是否是一个目录。 |
boolean isFile() | 测试此抽象路径名表示的文件是否是一个标准文件。 |
boolean isHidden() | 测试此抽象路径名指定的文件是否是一个隐藏文件。 |
设置权限
方法 | 说明 |
---|---|
boolean setReadable(boolean readable) | 设置此抽象路径名所有者读权限的一个便捷方法。 |
boolean setReadable(boolean readable, boolean ownerOnly) | 设置此抽象路径名的所有者或所有用户的读权限。 |
boolean setReadOnly() | 标记此抽象路径名指定的文件或目录,从而只能对其进行读操作。 |
boolean setWritable(boolean writable) | 设置此抽象路径名所有者写权限的一个便捷方法。 |
boolean setWritable(boolean writable, boolean ownerOnly) | 设置此抽象路径名的所有者或所有用户的写权限。 |
boolean setExecutable(boolean executable) | 设置此抽象路径名所有者执行权限的一个便捷方法。 |
boolean setExecutable(boolean executable, boolean ownerOnly) | 设置此抽象路径名的所有者或所有用户的执行权限。 |
获取文件信息
方法 | 说明 |
---|---|
int compareTo(File pathname) | 按字母顺序比较两个抽象路径名。 |
File getAbsoluteFile() | 返回此抽象路径名的绝对路径名形式。 |
String getAbsolutePath() | 返回此抽象路径名的绝对路径名字符串。 |
File getCanonicalFile() | 返回此抽象路径名的规范形式。 |
String getCanonicalPath() | 返回此抽象路径名的规范路径名字符串。 |
long getFreeSpace() | 返回此抽象路径名指定的分区中未分配的字节数。 |
String getName() | 返回由此抽象路径名表示的文件或目录的名称。 |
String getParent() | 返回此抽象路径名父目录的路径名字符串;如果此路径名没有指定父目录,则返回 null。 |
File getParentFile() | 返回此抽象路径名父目录的抽象路径名;如果此路径名没有指定父目录,则返回 null。 |
String getPath() | 将此抽象路径名转换为一个路径名字符串。 |
long getTotalSpace() | 返回此抽象路径名指定的分区大小。 |
long getUsableSpace() | 返回此抽象路径名指定的分区上可用于此虚拟机的字节数。 |
int hashCode() | 计算此抽象路径名的哈希码。 |
long lastModified() | 返回此抽象路径名表示的文件最后一次被修改的时间。 |
long length() | 返回由此抽象路径名表示的文件的长度。 |
String toString() | 返回此抽象路径名的路径名字符串。 |
URI toURI() | 构造一个表示此抽象路径名的 file: URI。 |
已过时。 | |
——————————————— |
遍历目录
方法 | 说明 |
---|---|
static File[] listRoots() | 列出可用的文件系统根。 |
String[] list() | 返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中的文件和目录。 |
String[] list(FilenameFilter filter) | 返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中满足指定过滤器的文件和目录。 |
File[] listFiles() | 返回一个抽象路径名数组,这些路径名表示此抽象路径名表示的目录中的文件。 |
File[] listFiles(FileFilter filter) | 返回抽象路径名数组,这些路径名表示此抽象路径名表示的目录中满足指定过滤器的文件和目录。 |
File[] listFiles(FilenameFilter filter) | 返回抽象路径名数组,这些路径名表示此抽象路径名表示的目录中满足指定过滤器的文件和目录。 |
FilenameFilter 过滤
dir
当前被检测的目录;
name
目录or文件的名称;
@Test
public void Demo56Test()
String path = "E:\\\\工作文档\\\\花垣县社会服务与管理网格化平台_20211013-\\\\源码分析";
File file = new File(path);
File[] files = file.listFiles(new FilenameFilter()
@Override
public boolean accept(File dir, String name)
return name.endsWith(".md"); // 获取所有 markdown 文件
);
System.out.println(Arrays.toString(files));
FileFilter过滤
pathname
抽象路径名
@Test
public void Demo60Test()
String path = "E:\\\\工作文档\\\\花垣县社会服务与管理网格化平台_20211013-\\\\源码分析";
File file = new File(path);
File[] files = file.listFiles(new FileFilter()
@Override
public boolean accept(File file)
if (file.isFile())
return file.getName().endsWith(".md");
return true;
);
System.out.println(Arrays.toString(files));
参考资料
笑虾:Java 学习笔记 - IO篇:复制文件
笑虾:Java 学习笔记 - Spring工具类:FileCopyUtils、StreamUtils
java.io.File
Interface FileFilter
Interface FilenameFilter
以上是关于Java 学习笔记 - IO篇:文件与目录的主要内容,如果未能解决你的问题,请参考以下文章
Java 学习笔记 - IO篇:对象流 ObjectInputStreamObjectOutputStream
Java 学习笔记 - IO篇:对象流 ObjectInputStreamObjectOutputStream