前言
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();
|
获取文件大小
1
| long size = file.length();
|
新建文件
- 文件不存在且新建成功时返回
true,文件已存在不会创建新文件,并且返回false
1
| boolean success = file.createNewFile();
|
删除文件或目录
- 文件存在且删除成功时返回
true
- 删除目录时,仅能删除空目录,如果目录不为空,不会删除,并且返回
false
1
| boolean success = file.delete();
|
在JVM退出时才执行删除
获取目录下的所有文件名和目录名列表
- 返回的文件名和目录名仅包含名称,不包含绝对路径
- 如果当前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("./"));
|
完成