Java中通过java.io.File类来对一个文件(包括目录)进行抽象的描述.注意,有File对象,并不代表真实存在该文件.
File概述
我们先来看看File类中的常见属性,构造方法和方法.
属性
修饰符及类型 | 属性 | 说明 |
static String | pathSeparator | 依赖系统的路径分隔符,String类型的表示 |
static char | pathSeparator | 依赖于系统的路径分隔符,char类型的表示 |
构造方法
签名 | 说明 |
File(File parent, String child) | 根据父目录 + 孩子文件路径,创建一个新的File实例 |
File(String pathname) | 根据文件路径创建一个新的File实例,路径可以是绝对路径也可以是相对路径 |
File(String parent, String child) | 根据父目录+孩子文件路径,创建一个新的File实例,父目录用路径表示 |
其中,在File(String pathname)中:
这个路径也可以是不存在的路径.
构造一个File对象,需指定路径,此处路径可以是相对的也可以是绝对的.
如果写作绝对路径: (1)如直接在idea中 运行程序.此时工作目录就是项目所在目录.
(2)如果是把代码打包成一个单独的jar包来执行,此时工作目录就是jar包所在目录.
方法
修饰符及返回值的类型 | 方法签名 | 说明 |
String | getParent() | 返回File对象的父目录文件路径 |
String | getName() | 返回File对象的纯文件名称 |
String | getPath() | 返回File对象的文件路径 |
String | getAbsolutePath() | 返回File对象的绝对路径 |
String | getCanonicalPath() | 返回File对象的修饰过的绝对路径 |
boolean | exists() | 判断File对象描述的文件是否真实存在 |
boolean | isDirectory() | 判断File对象代表的文件是否是一个目录 |
boolean | isFile() | 判断File对象代表的文件是否是一个普通文件 |
boolean | createNewFile() | 根据File对象,自动创建一个空文件.成功创建后返回true. |
boolean | delete() | 根据File对象,删除该文件.成功删除后返回true. |
void | deleteOnExit() | 根据File对象,标注文件将被删除, 删除动作会到JVM运行结束后才会运行 |
String[] | list() | 返回File对象代表下目录的所有文件名 |
File[] | listFiles() | 返回File对象代表的目录下的所有文件,以File对象表示 |
boolean | mkdir() | 创建File对象代表的目录 |
boolean | mkdirs() | 创建File对象代表的目录,如果必要,会创建中间目录 |
boolean | renameTo(File dest) | 进行文件改名,也可视为我们平时的剪切,粘贴操作 |
boolean | canRead() | 判断用户是否对文件有可读权限 |
boolean | canWrite() | 判断用户是否对文件有可写权限 |
代码示例
示例1:观察get系列的观点与差异:
import java.io.File;
import java.io.IOException;
public class FileTest1 {
public static void main(String[] args) throws IOException {
File file = new File("C:/code/gitee秘密通道/Java所有代码/test _1_20/test.txt");
System.out.println(file.getParent());
System.out.println(file.getName());
System.out.println(file.getPath());
System.out.println(file.getAbsolutePath());
System.out.println(file.getCanonicalPath());
}
}
运行结果:
注意:
如果构造File对象使用绝对路径,最后三个方法的操作结果确实没区别.但如果这样的话:
import java.io.File;
import java.io.IOException;
public class FileTest1 {
public static void main(String[] args) throws IOException {
File file = new File("./test.txt");
System.out.println(file.getParent());
System.out.println(file.getName());
System.out.println(file.getPath());
System.out.println(file.getAbsolutePath());
System.out.println(file.getCanonicalPath());
}
}
得出结果:
这时就有了明显的区别:
1.getPath()的结果就是File构造方法中的参数.
2. getAbsolutePath()中,此处是先一层一层找到system_code这一级目录,然后再找 . ,此时 . 就相当于原地踏步了一下
示例二
普通文件的创建
import java.io.File;
import java.io.IOException;
public class FileTest2 {
public static void main(String[] args) throws IOException {
File file = new File("hello-world.txt"); //要求该文件不存在
System.out.println(file.exists());
System.out.println(file.isDirectory());
System.out.println(file.isFile());
System.out.println(file.createNewFile());
System.out.println(file.exists());
System.out.println(file.isDirectory());
System.out.println(file.isFile());
System.out.println(file.createNewFile());
}
}
运行结果:
同时,也在旁边创建出了这个文件:
示例三:
普通文件的删除
import java.io.File;
import java.io.IOException;
public class FileTest3 {
public static void main(String[] args) throws IOException {
File file = new File("some-file.txt");
System.out.println(file.exists());
System.out.println(file.createNewFile());
System.out.println(file.exists());
System.out.println(file.delete());
System.out.println(file.exists());
}
}
运行结果:
示例4
观察deleteOnExit的现象
退出之后再删除,这样的文件,也称为"临时文件"->很有用有一些程序有这个.
作用:给你实时编辑的内容进行保存.防止文件没保存,机器突然pia~一下断电的情况
import java.io.File;
import java.io.IOException;
import static java.lang.Thread.sleep;
public class FileTest4 {
public static void main(String[] args) throws IOException, InterruptedException {
File file = new File("some-file.txt"); //要求该文件不存在,才能看到
System.out.println(file.exists());
System.out.println(file.createNewFile());
System.out.println(file.exists());
sleep(5000);
file.deleteOnExit();
System.out.println(file.exists());
}
}
结果:
程序运行结束后,文件还是被删除了.
示例5
观察目录的创建
import java.io.File;
public class FileTest5 {
public static void main(String[] args) {
File dir = new File("some-dir"); //要求该目录不存在,才能看到相同的现象
System.out.println(dir.isDirectory());
System.out.println(dir.isFile());
System.out.println(dir.mkdir());
System.out.println(dir.isDirectory());
System.out.println(dir.isFile());
}
}
运行结果:
同时,亦创建了一个新目录:
示例6
观察目录创建2
import java.io.File;
public class FileTest6 {
public static void main(String[] args) {
File dir = new File("some-parent\\some-dir");
System.out.println(dir.isDirectory());
System.out.println(dir.isFile());
System.out.println(dir.mkdirs());
System.out.println(dir.isDirectory());
System.out.println(dir.isFile());
}
}
运行结果:
同时:亦创建了一个新目录:
注意:如果使用mkdir(),如果中间目录不存在(这里就是some-parent不存在),则无法创建成功;
mkdirs()可以解决这个问题.
示例7
观察文件重命名:
import java.io.File;
public class FileTest7 {
public static void main(String[] args) {
File file = new File("hello-world.txt"); //这个要存在
File dest = new File("dest.txt"); //要求这个不存在
System.out.println(file.exists());
System.out.println(dest.exists());
System.out.println(file.renameTo(dest));
System.out.println(file.exists());
System.out.println(dest.exists());
}
}
运行结果: