File: File是java.io包下可以用来表示文件和信息的类,但它不表示文件的内容。在程序中操作文件和目录也可以通过File类来完成。
1. 构造方法public File(String pathname) :通过将给定的路径名字符串转换为抽象路径名来创建新的File实例。
public File(String parent, String child) :从父路径名字符串和子路径名字符串创建新的File实例。
public File(File parent, String child) :从父抽象路径名和子路径名字符串创建新的File实例。
public File(URI uri) :通过将给定的file:URL转换成一个抽象路径名来创建一个新的File实例。
//不使用 Java 提供的分隔符字段,\是windows系统下的文件分隔符。在linux系统下为/
File f1 = new File("E:\IO\a.txt");
//或者使用 Java 提供的分隔符File.separator
File f2 = new File("F:"+ File.separator + "IO"+ File.separator + "a.txt");
System.out.println(f1);//输出 E:IOa.txt
System.out.println(f2);//输出 F:IOa.txt
//public File(String parent, String child) :从父路径名字符串和子路径名字符串创建新的File实例。
File f3 = new File("E:");
File f4 = new File(f3,"IO");
System.out.println(f4); //输出 E:IO
//public File(String pathname) :通过将给定的路径名字符串转换为抽象路径名来创建新的File实例
File f5 = new File("E:"+File.separator+"IO"+File.separator+"a.txt");
System.out.println(f5); //输出 E:IOa.txt
//public File(String parent, String child) :从父路径名字符串和子路径名字符串创建新的File实例。
File f6 = new File("E:","IO\a.txt");
System.out.println(f6); //输出 E:IOa.txt
2. 常用方法
文件检测相关的方法:
boolean exists(): 判断File对象所对应的文件或目录是否存在。
boolean canWrite(): 判断File对象所对应的文件和目录是否可写。如果是目录,表示是否可以在目录中创建文件。如果是文件,表示是否可以在文件中写入内容。
boolean canRead(): 判断File对象所对应的文件和目录是否可读。
boolean isFile(): 判断File对象所对应的是否是文件,而不是目录。
boolean isDirectory(): 判断File对象所对应的是否是目录,而不是文件。
boolean isAbsolute(): 判断File对象所对应的文件或目录是否是绝对路径。在Linux系统下如果文件是以斜杠 / 开头,则是绝对路径,而对于windows系统,如果文件开头是一个磁盘盘符如D:,那么为绝对路径。
//判断文件是否存在 System.out.println(file.exists()); //判断文件是否可写 System.out.println(file.canWrite()); //判断文件是否可读 System.out.println(file.canRead()); //判断是否是一个文件 System.out.println(file.isFile()); //判断是否是一个目录 System.out.println(file.isDirectory()); //是否是一个绝对路径 System.out.println(file.isAbsolute());文件操作方法:
boolean createNewFile() 不存在则返回true并新建一个该File对象所指定的新文件 否则返回false
boolean delete(): 删除File对象所对应的文件或路径,如果表示目录,则目录下必须为空才能删除
boolean deleteonExit(): 文件使用完成后删
boolean mkdir(): 创建目录,如果上一级目录不存在,则会创建失败,可以简单理解为只能创建单级目录。调用该方法时File对象必须对应一个路径,而不是一个文件。
boolean mkdirs(): 创建多级目录,如果上一级目录不存在也会自动创建出来
String[] list(): 列出 File 象的所有子文件和路径名 ,返回String数组
File[] listFiles(): 列出File对象的所有子文件和路径,返回file数组。
getAbsolutePath():返回文件或者目录的绝对路径
getPath(): 将此抽象路径名转换为路径名字符串
getName(): 返回文件名
renameTo(File file): 把文件剪切为一个新的路径
//public File(String parent, String child) :从父路径名字符串和子路径名字符串创建新的File实例。
File dir = new File("E:\IO");
File file = new File(dir,"a.txt");
//判断dir 是否存在且表示一个目录,不存在则创建这个目录
if(!(dir.exists()||dir.isDirectory())){
dir.mkdirs();
//根据目录和文件名,创建 a.txt文件
file.createNewFile();
}
//返回由此抽象路径名表示的文件或目录的名称。 这只是路径名称序列中的最后一个名字。 如果路径名的名称为空,则返回空字符串。
System.out.println(file.getName()); //输出 a.txt
//返回此抽象路径名的父径名字符串,如果此路径名未命名为父目录,则返回null。
System.out.println(file.getParent());//输出 E:IO
//将此抽象路径名转换为路径名字符串。 结果字符串使用default name-separator character以名称顺序分隔名称。
System.out.println(file.getPath()); //输出 E:IOa.txt
FilenameFilter文件过滤器:
我们在调用list方法列出所有子文件和路径的时候,可以传一个FilenameFilter进去。FilenameFilter是一个有过滤文件的accept方法的函数式接口,过滤之后返回true会保留文件,否则不会保留
File file = new File("E:\software\jdk\bin");
String[] sublist = file.list(new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
return name.endsWith("exe");
}
});
for (String s : sublist) {
System.out.println(s);//输出file对应目录下所有以.exe为后缀的文件
}
遍历目录,获取目录结构与文件:
public class TraverseFiles {
private void readDir(File dir, int space){
//打印文件名前的空格
for (int i = 0; i < space ; i++) {
System.out.print(" ");
}
System.out.println(dir.getName());
//获取file文件的子目录和子文件
File[] subFiles = dir.listFiles();
//递归获取所有子目录与子文件
for (File subFile: subFiles){
if(subFile.isDirectory()){
readDir(subFile, space + 2);
}else {
for (int i = 0; i < space + 2 ; i++) {
System.out.print(" ");
}
System.out.println(subFile.getName());
}
}
}
private void readDir(File dir){
readDir(dir, 0);
}
private void readDir (String path){
readDir(new File(path));
}
public static void main(String[] args) {
TraverseFiles t = new TraverseFiles();
t.readDir("E:\software\jdk");
}
}
输出结果:



