Java File类详解
基础知识
File类是什么?
File对象代表路径,路径分为相对路径和绝对路径。
●File对象就表示一个路径,可以是文件的路径、也可以是文件夹的路径。
●这个路径可以是存在的,也允许是不存在的。
如路径1:"a.txt"路径2:"abc\\a.txt"是相对路径,路径1:“C:\\a.txt”
路径2:"C:\\abc\\a.txt"是绝对路径。
File的常用方法:
方法名称 | 说明 |
public File(String pathname) | 根据文件路径创建文件对象 |
public File(String parent,String child) | 根据父路径名字符串和子路径名字符串创建文件对象 |
public File(Fileparent,String child) | 根据父路径对应文件对象和子路径名字符串创建文件对象 |
import java.io.File;
public class FileDemo1 {
public static void main(String[] args) {
/*
* public File(String pathname) 根据文件路径创建文件对象
public File(String parent,String child) 根据父路径名字符串和子路径名字符串创建文件对象
public File(File parent,String child) 根据父路径对应文件对象和子路径名字符串创建文件对象
E:\JavaCode\Files\a.txt
E:/JavaCode/Files/a.txt
*
*/
// 1.根据字符串表示的路径,变成File对象
String path = "E:/JavaCode/Files/a.txt";
File f1 = new File(path);
System.out.println(f1);
// 2. 父级路径 E:\JavaCode\Files
// 子级路径 a.txt
String parent = "E:\\JavaCode\\Files\\"; // 写E:\JavaCode\Files也可以
String child = "a.txt";
File f2 = new File(parent, child);
System.out.println(f2);
System.out.println(File.pathSeparator);
System.out.println(File.separator);
// 3.把一个File表示的路径和String表示的路径进行拼接
File parentFile = new File("E:\\JavaCode\\Files");
String child2 = "a.txt";
File f3 = new File(parentFile, child2);
System.out.println(f3);
}
}
小结
1.File表示什么?
File对象表示路径,可以是文件、也可以是文件夹。这个路径可以是存在的,也可以是不存在的
2.绝对路径和相对路径是什么意思?
绝对路径是带盘符的。
相对路径是不带盘符的,默认到当前项目下去找。
3.File三种构造方法的作用?
- public File(String pathname)把字符串表示的路径变成File对象
- public File(String parent,String child)把父级路径和子级路径进行拼接
- public File(Fileparent,String child)把父级路径和子级路径进行拼接
File的常见成员方法
判断、获取相关的方法
方法名称 | 说明 |
public boolean isDirectory() | 判断此路径名表示的File是否为文件夹 |
public boolean isFile() | 判断此路径名表示的File是否为文件 |
public boolean exists() | 判断此路径名表示的File是否存在 |
public long length() | 返回文件的大小(字节数量Bytes) |
public String getAbsolutePath() | 返回文件的绝对路径 |
public String getPath() | 返回定义文件时使用的路径 |
public String getName() | 返回文件的名称,带后缀 |
public long lastModified() | 返回文件的最后修改时间(时间毫秒值) |
方法使用示例:
import java.io.File;
import java.util.Date;
public class FileDemo2 {
public static void main(String[] args) {
// 1.根据字符串表示的路径,变成File对象
String path = "E:/JavaCode/Files/a.txt";
File f1 = new File(path);
// 2.方法使用示例
System.out.println("isFile:" + f1.isFile());
System.out.println("isDirectory:" + f1.isDirectory());
System.out.println("exists:" + f1.exists());
System.out.println("length:" + f1.length());
System.out.println("getAbsolutePath:" + f1.getAbsolutePath());
System.out.println("getPath:" + f1.getPath());
System.out.println("getName:" + f1.getName());
System.out.println("lastModified:" + new Date(f1.lastModified()));
}
}
一种可能的输出为:
isFile:true
isDirectory:false
exists:true
length:131
getAbsolutePath:E:\JavaCode\Files\a.txt
getPath:E:\JavaCode\Files\a.txt
getName:a.txt
lastModified:Mon Dec 04 20:26:37 CST 2023
方法length()
方法length的作用是返回文件的大小(字节数量)。
1:这个方法只能获取文件的大小,单位是字节,如果单位我们要是M,G,可以不断的除以1024
2:这个方法无法获取文件夹的大小,如果我们要获取一个文件夹的大小,需要把这个文件夹里面所有的文件大小都累加在一起。
方法getName()
如果调用者是文件,本方法将返回该调用者的文件和后缀名,也即扩展名。如果调用者是文件夹:则返回的就是文件夹的名字。
创建、删除相关的方法
方法名称 | 说明 |
public boolean createNewFile() | 创建一个新的空的文件 |
public boolean mkdir() | 创建单级文件夹 |
public boolean mkdirs() | 创建多级文件夹 |
public boolean delete() | 删除文件、空文件夹 |
delete方法默认只能删除文件和空文件夹,delete方法直接删除不走回收站
方法createNewFile
- createNewFile创建一个新的空的文件。如果当前路径表示的文件是不存在的,则创建成功,方法返回true;如果当前路径表示的文件是存在的,则创建失败,方法返回false。
- 如果创建文件时其父级路径是不存在的,那么方法会有异常IOException。
- createNewFile方法创建的一定是文件,如果路径中不包含后缀名,则创建一个没有后缀的文件。
方法mkdir
- windows当中路径是唯一的,如果当前路径已经存在,则创建失败,返回false
- mkdir方法只能创建单级文件夹,无法创建多级文件夹。
import java.io.File;
import java.io.IOException;
public class FileDemo3 {
public static void main(String[] args) throws IOException {
// 1.创建一个新的空的文件
File f1 = new File("E:/JavaCode/Files/c.txt");
boolean flag = f1.createNewFile();
System.out.println(flag);
// 2.mkdir
// 细节1:windows当中路径是唯一的,如果当前路径已经存在,则创建失败,返回false
// 细节2:mkdir方法只能创建单级文件夹,无法创建多级文件夹。
File f2 = new File("E:/JavaCode/Files/aaa");
boolean flag2 = f2.mkdir();
System.out.println(flag2);
// 3.mkdirs 创建多级文件夹
File f3 = new File("E:/JavaCode/Files/aaa/bbb/ccc");
boolean flag3 = f3.mkdirs();
System.out.println(flag3);
}
}
方法delete
用来删除文件或文件夹。
- 如果删除的是文件,则直接删除,不走回收站。
- 如果删除的是空文件夹,则直接删除,不走回收站,
- 如果删除的是有内容的文件夹,则删除失败。
获取并遍历相关的方法
方法名称 | 说明 |
public File[]listFiles() | 获取当前该路径下所有内容 |
本方法的特点:
- 当调用者File表示的路径不存在时,返回null当调用者File表示的路径是文件时,返回null
- 当调用者File表示的路径是一个空文件夹时,返回一个长度为0的数组
- 当调用者File表示的路径是一个有内容的文件夹时,将里面所有文件和文件夹的路径放在File数组中返回
- 当调用者File表示的路径是一个有隐藏文件的文件夹时,将里面所有文件和文件夹的路径放在File数组中返回,包含隐藏文件
- 当调用者File表示的路径是需要权限才能访问的文件夹时,返回null
import java.io.File;
import java.io.IOException;
public class FileDemo5 {
public static void main(String[] args) throws IOException {
// 1.创建一个新的空的文件
File f1 = new File("E:/JavaCode/");
// 2.listFiles()方法
//作用:获取aaa文件夹里面的所有内容,把所有的内容放到数组中返回
File[] files = f1.listFiles();
for (File file : files) {
// file依次表示文件夹中每一个文件或文件夹
System.out.println(file.getAbsolutePath());
}
}
}
获取并遍历相关的方法
方法名称 | 说明 |
public static File[]listRoots() | 列出可用的文件系统根 |
public String[]list() | 获取当前该路径下所有内容 |
public String[]list(FilenameFilter filter) | 利用文件名过滤器获取当前该路径下所有内容 |
public File[]listFiles() | 获取当前该路径下所有内容 |
public File[]listFiles(FileFilter filter) | 利用文件名过滤器获取当前该路径下所有内容 |
public File[]listFiles(FilenameFilter filter) | 利用文件名过滤器获取当前该路径下所有内容 |
方法listRoots
文件系统根,对于Windows系统来说就是列出所有盘符。
方法list
获取当前目录下的内容。
import java.io.File;
import java.io.FilenameFilter;
import java.io.IOException;
import java.util.Arrays;
public class FileDemo6 {
public static void main(String[] args) throws IOException {
// 1. listRoots 获取系统中所有的盘符
File[] files = File.listRoots();
System.out.println(Arrays.toString(files));
System.out.println("===============");
// 2. list 获取当前该路径下所有内容(仅仅能获取名字)
File f1 = new File("E:/JavaCode/Files");
String[] list = f1.list();
for (String s : list) {
System.out.println(s);
}
// 3. list(FilenameFilter filter) 利用文件名过滤器获取当前路径下的所有内容
// 需求:获取目录下所有txt文件
File f2 = new File("E:/JavaCode/Files");
f2.list(new FilenameFilter() {
//accept方法的形参,依次表示aaa文件夹里面每一个文件或者文件夹的路径
// 参数一:父级路径
// 参数二:子级路径
//返回值:如果返回值为true,就表示当前路径保留
// 如果返回值为false,就表示当前路径舍弃不要
@Override
public boolean accept(File dir, String name) {
File src = new File(dir, name);
return src.isFile() && name.endsWith(".txt");
}
});
}
}
方法listFiles(FileFilter filter)
import java.io.File;
import java.io.FileFilter;
import java.io.FilenameFilter;
import java.io.IOException;
public class FileDemo7 {
public static void main(String[] args) throws IOException {
// . listFiles(FileFilter filter) 利用文件名过滤器获取当前路径下的所有内容
// 需求:获取目录下所有txt文件
File f2 = new File("E:/JavaCode/Files");
// FileFilter
File[] txtFiles1 = f2.listFiles(new FileFilter() {
@Override
public boolean accept(File pathname) {
return pathname.isFile() && pathname.getName().endsWith(".txt");
}
});
// FilenameFilter
File[] txtFiles2 = f2.listFiles(new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
File src = new File(dir, name);
return src.isFile() && name.endsWith(".txt");
}
});
}
}