【笔记】Java的文件和目录操作

前言

Java的文件和目录操作学习笔记

创建文件对象

  • 不管文件是否存在,都会新建空文件
  • 如果目录不存在,会抛出异常

指定文件的完整路径

<file>:文件路径

1
File file = new File("<file>");

分别指定目录路径和文件名

<dir>:目录路径
<file>:文件名

1
File file = new File("<dir>", "<file>");

获取文件名

  • 获取路径中最后一个元素的名称,不论在文件系统是否存在
1
String name = file.getName();

获取父目录名

  • 获取路径中倒数第二个元素的名称,不论在文件系统是否存在
  • 如果没有倒数第二个元素的名称,则返回null
1
String parent = file.getParent();

获取父目录对象

1
File parentFile = file.getParentFile();
  • 相当于
1
2
String parent = file.getParent();
File parentFile = new File(parent);

获取路径

  • 获取定义File对象时传递的路径,不论在文件系统是否存在
  • 如果定义File对象时传递的是相对路径,则返回的还是相对路径
  • 返回的路径中包含的分隔符是根据当前系统格式化的
1
String path = file.getPath();

判断是否是绝对路径

1
boolean absolute = file.isAbsolute();

获取绝对路径

  • 如果已经是绝对路径了,则直接返回
  • 如果是相对路径,则返回当前目录绝对路径与定义File对象时传递的相对路径进行拼接的结果
  • 对于路径中出现的...会保留而不会被格式化
1
String absolutePath = file.getAbsolutePath();

获取绝对路径创建的对象

1
File absoluteFile = file.getAbsoluteFile();
  • 相当于
1
2
String absolutePath = file.getAbsolutePath();
File absoluteFile = new File(absolutePath);

获取格式化后的路径

  • 对于路径中出现的...会被格式化
1
String canonicalPath = file.getCanonicalPath();

获取格式化后的路径创建的对象

1
File canonicalFile = file.getCanonicalFile();
  • 相当于
1
2
String canonicalPath = file.getCanonicalPath();
File canonicalFile = new File(canonicalPath);

获取URI

  • 对于文件的URI,会被添加file:/作为前缀
    • 对于Linux路径,URI的根目录为file:/
    • 对于Windows路径,URI的根目录为file:/C:/
  • 对于Windows路径,转换为URI时会强制采用/作为分隔符
  • 对于路径中出现的...会保留而不会被格式化
1
String uri = file.toURI();

判断文件或目录是否存在

1
boolean exist = file.exists();

判断是否是目录

1
boolean yes = file.isDirectory();

判断是否是文件

1
boolean yes = file.isFile();

判断是否是隐藏属性

  • Linux上会判断文件是否是以.开头,Windows上会判断文件属性是否为隐藏

在Windows上以.开头但是文件属性不是隐藏的文件不会被认为是隐藏文件

1
boolean yes = file.isHidden();

获取文件大小

  • 文件不存在时返回0
1
long size = file.length();

新建文件

  • 文件不存在且新建成功时返回true,文件已存在不会创建新文件,并且返回false
1
boolean success = file.createNewFile();

删除文件或目录

  • 文件存在且删除成功时返回true
  • 删除目录时,仅能删除空目录,如果目录不为空,不会删除,并且返回false
1
boolean success = file.delete();

在JVM退出时才执行删除

1
file.deleteOnExit();

获取目录下的所有文件名和目录名列表

  • 返回的文件名和目录名仅包含名称,不包含绝对路径
  • 如果当前File对象的路径不是目录,则返回null
  • 如果当前File对象的路径不存在,则返回null
1
String[] list = file.list();

获取目录下的所有文件和目录对象列表

1
File[] listFile = file.listFIle();

新建目录

只新建一级目录

  • 如果当前File对象的路径不是目录,则返回false
  • 如果当前File对象描述的路径的倒数第二级目录不存在,则返回false
1
boolean success = file.mkdir();

递归新建多级目录

  • 如果当前File对象的路径不是目录,则返回false
1
boolean success = file.mkdirs();

移动或重命名文件或目录

1
2
3
4
File oldFile = new File("../old-name");
File newFile = new File("./new-name");

boolean success = oldFile.renameTo(newFile);

修改文件上次修改时间

<timestamp>:毫秒时间戳

1
boolean success = file.setLastModified(<timestamp>);

修改文件权限为只读

  • 不论之前是不是已经时只读文件了,都会重新设置为只读,并返回true,除非修改失败了则返回false
1
boolean success = file.setReadOnly();

修改文件读、写、执行权限

  • 通过第二个参数确定当前设置是否只对当前用户生效
  • 如果操作系统不支持,则第二个参数无效

修改读权限

1
boolean success = file.setReadable(true);
1
boolean success = file.setReadable(true, true);

修改写权限

1
boolean success = file.setWritable(true);
1
boolean success = file.setWritable(true, true);

修改可执行权限

1
boolean success = file.setExecutable(true);
1
boolean success = file.setExecutable(true, true);

判断文件权限

判断是否可读

1
boolean ok = file.canRead();

判断是否可写

1
boolean ok = file.canWrite();

判断是否可执行

1
boolean ok = file.canExecute();

获取磁盘空间

获取全部空间

1
long space = getTotalSpace();

获取已使用空间

1
long space = getUsableSpace();

获取未使用空间

1
long space = getFreeSpace();

类方法

获取当前文件系统所有根目录

  • Windows每个磁盘都被视为一个根目录,Linux和MacOS每个挂载点都被视为一个根目录
1
String[] listRoots = File.listRoots();

新建临时文件

  • 新建的临时文件在程序结束后不会被删除
  • 新建的临时文件名一定不会重名

prefix:必须指定长度至少为3的字符串作为文件名前缀
.tmp:指定文件名后缀,如果不指定则默认无后缀名

使用默认临时文件存放目录

1
File file = File.createTempFile("prefix", ".tmp");

指定临时文件存放目录

1
File file = File.createTempFile("prefix", ".tmp", new File("./"));

完成