File
在计算机中,文件是非常重要的储存方式,java中标准库java.io提供了File对象来操作文件。
构建File对象
public class Main {
public static void main(String[] args) {
File f = new File("C:\\...\\...");
System.out.println(f);
}
}
构建环境时既可以传入相对路径也可以传入绝对路径。
FIle对象有三种表示路径的方法,一种时getPat(),返回构造方法传入的路径,一种是getAbsolutePath(),返回绝对路径,一种是getCanonicalPath(),返回规范路径。
规范路径
public class Main {
public static void main(String[] args) throws IOException {
File f = new File("...");
System.out.println(f.getPath());
System.out.println(f.getAbsolutePath());
System.out.println(f.getCanonicalPath());
}
}
如果绝对路径表示为:C:\user\123\...\c.exe,而规范路径就是:C:\user\c.exe.规划路径相当于把‘.’和’..‘转换成标准的绝对路径后的路径。
文件和目录
File对象既可以表示文件,也可以表示目录。即使这个文件或目录不存在,代码也不会出错,因为构建一个FIle对象,并不会真正的创建一个目录或文件,只有当我们调用File的某些方法时,才会在硬盘上进行操作。
我们可以调用isDirectory(),判断该File对象是否存在。
public class Main {
public static void main(String[] args) throws IOException {
File f1 = new File("C:\\user");
File f2 = new File("C:\\user\\c.exe");
File f3 = new File("C:\\user\\nothing");\\空
System.out.println(f1.isFile());
System.out.println(f1.isDirectory());
System.out.println(f2.isFile());
System.out.println(f2.isDirectory());
System.out.println(f3.isFile());
System.out.println(f3.isDirectory());
}
}
用File对象获取到一个文件时,还可以判断文件的权限和大小。
- boolean canRead():是否可读
- boolean canWrite():是否可写
- boolean canExecute():是否可执行
- long length():文件字节大小
创建和删除文件
createNewFIle()创建文件,delete()删除文件
File file = new File("/.../.../...");
if (file.createNewFile()) {
// 创建文件
if (file.delete()) {
// 删除文件
}
}
createTempFile()来创建临时文件,deleteOnExit()在退出时删除该文件。
public class Main {
public static void main(String[] args) {
File f = File.createTempFile("tmp-", ".txt"); // 临时文件
f.deleteOnExit(); // 退出时自动删除
System.out.println(f.isFile());
System.out.println(f.getAbsolutePath());
}
}
遍历文件和目录
创建一个FIle目录时,可以用list()和listFiles()列出目录下的文件和子目录。
public class Main {
public static void main(String[] args){
File f = new File("C:\\user");
File[] fs1 = f.listFiles(); // 列出所有文件和子目录
File[] fs2 = f.listFiles(new FilenameFilter() { // 仅列出.exe文件
public boolean accept(File dir, String name) {
return name.endsWith(".exe"); // 返回true表示接受该文件
}
}
}
}
和文件操作类似,File对象如果表示一个目录,可以通过以下方法创建和删除目录:
- boolean mkdir():创建当前File对象表示的目录
- boolean mkdirs():创建当前File对象表示的目录,并在必要时将不存在的父目录也创建出来;
- boolean delete():删除当前File对象表示的目录,当前目录必须为空才能删除成功。
Path
Path对象与FIle对象类似,但操作更加简单:
public class Main {
public static void main(String[] args) throws IOException {
Path p1 = Paths.get(".", "project", "study"); // 构造一个Path对象
System.out.println(p1);
Path p2 = p1.toAbsolutePath(); // 转换为绝对路径
System.out.println(p2);
Path p3 = p2.normalize(); // 转换为规范路径
System.out.println(p3);
File f = p3.toFile(); // 转换为File对象
System.out.println(f);
for (Path p : Paths.get("..").toAbsolutePath()) { // 可以直接遍历Path
System.out.println(" " + p);
}
}
}