狭义的文件分成两大类
- 普通文件
- 目录文件(文件夹)
文件的元信息,路径的操作
Java中通过java.io.File类来对文件(包括目录)进行抽象的描述。有File对象,并不代表真实存在该文件。
File类中常见的属性
修饰符及类型 | 属性 | 说明 |
---|---|---|
static String | pathSeparator | 依赖与系统的路径分隔符,String类型的表示 |
static char | pathSeparator | 依赖与系统的路径分割符,char来兴的表示 |
File类中常见的构造方法
签名 | 说明 |
---|---|
File(File parent,String child) | 根据父目录+孩子文件路径,创建一个新的File实例 |
File(String pathname) | 根据文件路径创建一个新的File实例,路径可以是绝对路径或者相对路径 |
File(String parent,String child) | 根据父目录+孩子文件路径,创建一个新的File实例,父目录用路径表示 |
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() | 判断用户是否对文件有可写权限 |
get系列方法的特点和差异
public class TestDemo1 {
public static void main(String[] args) throws IOException {
//注意,有 File 对象,并不代表真实存在该文件
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.getAbsoluteFile());
System.out.println(file.getAbsolutePath());
System.out.println(file.getCanonicalFile());
System.out.println(file.getCanonicalPath());
}
}
/**
.
test.txt
.\test.txt
C:\JAVA_code\java100_1015\.\test.txt
C:\JAVA_code\java100_1015\.\test.txt
C:\JAVA_code\java100_1015\test.txt
C:\JAVA_code\java100_1015\test.txt
*/
普通文件的创建、删除
public class TestDemo2 {
public static void main(String[] args) throws IOException {
//包内相对路径的写法
File file = new File("src/IODemo1/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());
}
}
/**
false
false
false
true
true
false
true
false
*/
普通文件的删除
public class TestDemo3 {
public static void main(String[] args) throws IOException {
File file = new File("Test3.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());
}
}
/**
true
false
true
true
false
*/
程序退出时文件删除(一般用于临时性文件)
public class TestDemo4 {
public static void main(String[] args) throws IOException, InterruptedException {
File file = new File("test4.txt");
System.out.println(file.createNewFile());
Thread.sleep(3000);
file.deleteOnExit();
}
}
通过list遍历当前目录下的所有文件【使用递归】
public class TeacherDemo6 {
/*
* List<String>是存放String类型的对象 String[]数组里面是存放String型的值
* String[]是数组,定长,不可变
* List<String> 是泛型 ,非定长,可变
* */
public static List<String> result = new ArrayList<>();
public static void getAllFiles(String basePath){
File file = new File(basePath);
if(file.isFile()){
result.add(basePath);
}else if(file.isDirectory()){
String[] files = file.list();
for (String f:files) {
getAllFiles(basePath+"/"+f);
}
}else{
//当前文件既不是普通文件,也不是目录。例如scoket文件,管道文件,设备块文件
}
}
public static void main(String[] args) {
getAllFiles(".");
//System.out.println(result);
for (String s: result) {
System.out.println(s);
}
}
}
创建目录(mkdir())
public class TestDemo6 {
public static void main(String[] args) {
File file = new File("Test6");
System.out.println(file.isDirectory());
System.out.println(file.isFile());
System.out.println(file.mkdir());
System.out.println(file.isDirectory());
System.out.println(file.isFile());
}
}
/**
false
false
true
true
false
*/
创建多级目录(mkdirs())
public class TestDemo6 {
public static void main(String[] args) {
File file = new File("Test6\\test6");
System.out.println(file.isDirectory());
System.out.println(file.isFile());
System.out.println(file.mkdirs());
System.out.println(file.isDirectory());
System.out.println(file.isFile());
}
}
修改文件名,移动文件(renameTo)
public class TestDemo7 {
public static void main(String[] args) {
File file = new File("hello.txt");
File file2 = new File("./Test6/test6/hello.txt");
//移动文件
file.renameTo(file2);
}
}
public class TestDemo7 {
public static void main(String[] args) {
File file = new File("./Test6/test6/hello.txt");
File file2 = new File("./Test6/test6/helloworld.txt");
//重命名
file.renameTo(file2);
}
}