目录
一、File的属性
二、File的构造方法
三、File的方法
四、代码示例
1、getName,getParent,getPath方法
2、getAbsolutePath,getCanonicalPath方法
3、exists,isDirectory,createNewFile方法
4、createNewFile,delete,deleteOnExit
5、list,listFiles,mkdir,mkdirs,renameTo方法
本章内容,主要涉及文件的元信息、路径的操作,并不存在对文件的读写操作。
Java通过 java.io.File 类来对一个文件(包括目录)进行抽象的描述。注意:有File对象并不意味着真实存在该文件。
以下是对File的概述:
一、File的属性
修饰符及类型 | 属性 | 说明 |
static String | pathSeparator | 依赖于系统的路径分隔符,String 类型的表示 |
static char | pathSeparatorChar | 依赖于系统的路径分隔符,char类 型 |
这里路径直接的分隔符是根据系统自动调整的,在开发过程中还是更推荐使用正斜杠 “ / ”。windows也支持正斜杠。
二、File的构造方法
签名 | 说明 |
File(File parent, String child) | 根据父目录 + 孩子文件路径,创建⼀个新的 File 实例 |
File(String pathname) | 根据文件路径创建⼀个新的 File 实例,路径可以是绝 对路径或者相对路径 |
File(String parent, String child) | 根据父目录 + 孩子文件路径,创建⼀个新的 File 实 例,父目录用路径表示 |
这里主要介绍中间的构造方法,中间的是最常用的。注意:这里的决定路径有两种情况:
1、如果是在idea中运行程序,此时工作目录就是在项目所在的目录。
2、如果把代码打包成一个jar包,此时工作目录就是在jar包所在目录。
三、File的方法
修饰符及返回值类型 | 方法签名 | 说明 |
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、getName,getParent,getPath方法
绝对路径的File对象,代码如下
public class IODemo1 {
public static void main(String[] args) {
//指定文件的路径
File f1 = new File("C:/IOTest/test.txt");//绝对路径
System.out.println(f1.getPath());//返回File对象的⽂件路径
System.out.println(f1.getParent());//返回 File 对象的⽗⽬录⽂件路径
System.out.println(f1.getName());//返回 FIle 对象的纯⽂件名称
}
}
执行结果:
相对路径的File对象,代码如下
public class IODemo1 {
public static void main(String[] args) {
//指定文件的路径
File f1 = new File("./test.txt");//绝对路径
System.out.println(f1.getPath());//返回File对象的⽂件路径
System.out.println(f1.getParent());//返回 File 对象的⽗⽬录⽂件路径
System.out.println(f1.getName());//返回 FIle 对象的纯⽂件名称
}
}
执行结果:
2、getAbsolutePath,getCanonicalPath方法
使用绝对路径创造一个File对象,代码如下
public class IODemo2 {
public static void main(String[] args) throws IOException {
File f = new File("C:/IOTest/test.txt");//绝对路径
System.out.println(f.getAbsolutePath());//返回File对象的绝对路径
System.out.println(f.getCanonicalPath());//返回File对象的修饰过的绝对路径
}
}
执行结果:
使用相对路径创建File对象,代码如下:
public class IODemo2 {
public static void main(String[] args) throws IOException {
File f = new File("./test.txt");//绝对路径
System.out.println(f.getAbsolutePath());//返回File对象的绝对路径
System.out.println(f.getCanonicalPath());//返回File对象的修饰过的绝对路径
}
}
执行结果:
可以看出,上面方法在绝对路径中没有啥差别,但在相对路径的就有些许差别。getCanonicalPath返回File对象的修饰过的绝对路径,也就没有了点 ' . ' 修饰。
3、exists,isDirectory,createNewFile方法
使用相对路径创建File对象,代码如下:
public class IODemo3 {
public static void main(String[] args) {
File f = new File("./test.txt");
boolean ret1 = f.exists();//判断 File 对象描述的⽂件是否真实存在
boolean ret2 = f.isDirectory();//判断 File 对象代表的⽂件是否是⼀个⽬录
boolean ret3 = f.isFile();//判断 File 对象代表的⽂件是否是⼀个普通⽂件
System.out.println(ret1);
System.out.println(ret2);
System.out.println(ret3);
}
}
执行结果:
4、createNewFile,delete,deleteOnExit
先创造出一个文件,使用createNewFile方法,代码如下:
public class IODemo4 {
public static void main(String[] args) throws IOException {
File f = new File("./test.txt");
boolean ret1 = f.createNewFile();//根据 File对象,⾃动创建⼀个空⽂件。成功创建后返回 true
System.out.println(ret1);
}
}
执行代码前:
执行代码后:
多了test.txt文件
delete方法删除test.txt文件,代码如下:
public class IODemo4 {
public static void main(String[] args) throws IOException {
File f = new File("./test.txt");
boolean ret1 = f.createNewFile();//根据 File对象,⾃动创建⼀个空⽂件。成功创建后返回 true
System.out.println(ret1);
boolean ret = f.delete();//根据 File 对象,删除该⽂件。成功删除后返回 true
System.out.println(ret);
}
}
执行结果:
test.txt文件没有了。
deleteOnExit方法,在程序执行完后才会删除指定的文件,代码如下:
public class IODemo4 {
public static void main(String[] args) throws IOException, InterruptedException {
File f = new File("./test.txt");
boolean ret1 = f.createNewFile();//根据 File对象,⾃动创建⼀个空⽂件。成功创建后返回 true
System.out.println(ret1);//根据 File 对象,标注⽂件将被删除,删除动作会到 JVM 运⾏结束时才会进⾏
f.deleteOnExit();
Thread.sleep(5000);
}
}
执行前:
有test.txt文件。
执行后:
过5秒后才会删除test.txt文件。
5、list,listFiles,mkdir,mkdirs,renameTo方法
list:
代码如下:
public class IODemo5 {
public static void main(String[] args) {
File f = new File(".");
String[] files = f.list();//返回 File 对象代表的⽬录下的所有⽂件名
System.out.println(Arrays.toString(files));
}
}
执行结果:
listFiles:
代码如下:
public class IODemo5 {
public static void main(String[] args) {
// String[] files = f.list();//返回 File 对象代表的⽬录下的所有⽂件名
// System.out.println(Arrays.toString(files));
File f = new File(".");
File[] files = f.listFiles();//返回File对象代表的⽬录下的所有⽂件,以File对象表⽰
System.out.println(Arrays.toString(files));
}
}
执行结果:
mkdir:
代码如下:
public class IODemo6 {
public static void main(String[] args) {
File f = new File("./aaa");//创建 File 对象代表的⽬录
boolean ret1 = f.mkdir();
System.out.println(ret1);
}
}
执行前:
执行后:
多出了aaa目录。
mkdirs:
代码如下:
public class IODemo7 {
public static void main(String[] args) {
File f = new File("./aaa/bbb/ccc");//创建 File 对象代表的⽬录,如果必 要,会创建中间⽬录
boolean ret = f.mkdirs();
System.out.println(ret);
}
}
执行前:
执行后:
当前目录下多了aaa/bbb/ccc。
renameTo:
代码如下:
public class IODemo8 {
public static void main(String[] args) {
File src = new File("./test2.txt");
File dest = new File("./test.txt");
src.renameTo(dest);//进⾏⽂件改名,也可以视为我们平时的剪切、粘贴操作
}
}
执行前:
文件名是test.txt。
执行后:
文件名是test2.txt。
除重命名功能外,renameTo还有移动功能(移动比复制、粘贴效率高,前提是在同一硬盘上)。