在文件I/O这一节的知识里,对文件的操作主要分为两大类:
☑️针对文件系统进行的操作
☑️针对文件内容进行的操作
针对文件系统进行的操作主要是对Java中的File类进行操作。这篇文章里,博主就来带大家看看Java中针对文件系统的一些常用操作
如果还不了解文件路径,博主建议先了解一些关于文件路径的简单知识,链接如下
文件路径-绝对路径与相对路径
下表中列出了常见的针对文件系统的操作,有需要的同学可以自行对照使用⬇️
在表后,博主将对一些重要操作进行代码演示和说明由于博主使用的是Mac系统,下面的演示都会基于Mac系统进行
返回类型 | 方法名 | 说明 |
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() | 判断用户是否对文件有可写权限 |
方法名 |
说明 |
File(File parent, String child) |
根据⽗⽬录 + 孩⼦⽂件路径,创建⼀个新的 File 实例 |
File(String pathname) |
根据⽂件路径创建⼀个新的 File 实例,路径可以是绝 对路径或者相对路径 |
File(String parent, String child) |
根据⽗⽬录 + 孩⼦⽂件路径,创建⼀个新的 File 实 例,⽗⽬录⽤路径表⽰ |
我们最常使用第二个方法
File file = new File("/Users/liuwenwen/Desktop/test.txt");
了解 文件路径-绝对路径与相对路径后,给出下面操作⬇️
返回类型 | 方法名 | 说明 |
String | getParent() | 返回 File 对象的父目录文件路径 |
String | getName() | 返回 File 对象的纯文件名称 |
String | getPath() | 返回 File 对象的文件路径 |
String | getAbsolutePath() | 返回 File 对象的绝对路径 |
String | getCanonicalPath() | 返回 File 对象的修饰过的绝对路径 |
先按照绝对路径的方式来写
import java.io.File;
import java.io.IOException;
public class Main {
public static void main(String[] args) throws IOException {
File file = new File("/Users/liuwenwen/Desktop//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());
}
}
运行结果如下
此时返回的路径都是绝对路径
看不出getAbsolutePath()与getCanonicalPath()的区别
将绝对路径改为相对路径后
import java.io.File;
import java.io.IOException;
public class Main {
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());
}
}
获得的结果是
可以看到此时返回的是相对路径
getAbsolutePath()返回的结果即是当前所在路径(IDE项目路径)+ 相对路径
而getCanonicalPath()返回的则是getAbsolutePath()简化版
运行下面一段代码
import java.io.File;
import java.util.Arrays;
public class demo3 {
public static void main(String[] args) {
File file = new File("/Users/liuwenwen/Desktop");
String[] files = file.list();
System.out.println(files);
System.out.println(Arrays.toString(files));
}
}
得到结果是
直接打印数组,得到的是哈希值。因此我们需要用到 Arrays.toString()方法,这样才能打印出我们所要的数组内容
运行listFiles()方法
import java.io.File;
import java.util.Arrays;
public class demo3 {
public static void main(String[] args) {
File file = new File("/Users/liuwenwen/Desktop");
File[] files = file.listFiles();
System.out.println(Arrays.toString(files));
}
}
得到结果
将两组结果进行对比
[杂, .DS_Store, 写作相关, .localized, 女性主义, test.txt, 学习]
[/Users/liuwenwen/Desktop/杂, /Users/liuwenwen/Desktop/.DS_Store, /Users/liuwenwen/Desktop/写作相关, /Users/liuwenwen/Desktop/.localized, /Users/liuwenwen/Desktop/女性主义, /Users/liuwenwen/Desktop/test.txt, /Users/liuwenwen/Desktop/学习]
可以发现,list()获得的是文件名,listFiles()获得的是文件路径名
创建目录操作其实就是创建文件夹操作
运行下面代码
import java.io.File;
public class demo4 {
public static void main(String[] args) {
File file = new File("/Users/liuwenwen/Desktop/abc");
System.out.println(file.mkdir());
}
}
桌面上多出了abc文件夹,创建目录成功!
如果要创建多级目录,我们则使用mkdirs()方法
import java.io.File;
public class demo4 {
public static void main(String[] args) {
File file = new File("/Users/liuwenwen/Desktop/aaa/bbb/ccc");
System.out.println(file.mkdirs());
}
}
创建结果如图
将test.txt文件重命名为test2.txt文件
import java.io.File;
public class demo5 {
public static void main(String[] args) {
File srcFile = new File("/Users/liuwenwen/Desktop/test.txt");
File desFile = new File("/Users/liuwenwen/Desktop/test2.txt");
System.out.println(srcFile.renameTo(desFile));
}
}