File class(文件类)
1、定义
File class 是一个代表文件或者目录(文件夹)的类。
目录本质上是一个路径,用来标识文件。不占内存。
2、字段摘要
在windows中分隔路径用的是“;”,在Linux中用的是“:”。
pathSeparator
与系统有关的路径分隔符,为了方便,它被表示为一个字符串。字符串类型,好用。
pathSeparatorChar
与系统有关的路径分隔符。字符类型,为了节省空间。
separator
与系统有关的默认名称分隔符,为了方便,它被表示为一个字符串。字符串类型。
separatorChar
与系统有关的默认名称分隔符。字符类型。
3、构造方法
File(File parent,String child);
根据parent的路径child的文件,创建一个File对象。
File(String child);
创建一个file对象指向child。
仅仅将此路径标记为一个file对象,而不去检查这个文件是否真实存在。
4、重要方法
1.创建
createNewFile();
创建文件。只有当文件不存在的时候才会创建。此方法需要有一个boolean标记,创建成功返回一个true,创建失败返回一个file。在创建文件的时候,要求存放文件的路径要真实存在,如果不存在则报错,不会创建父目录。只能用于创建文件,不能用于创建目录。
boolean b = file.createNewFile();
mkdir();
创建目录。只能创建目录,不能创建文件。只能创建一层目录,不能一次性创建多层。
mkdirs();
创建多层目录。
2.删除
delete();
表示彻底删除文件或者目录。如果目录有子文件或子目录,则删除失败。
3.获取
getAbsoluteFile();
获取File对象的绝对路径。
getAbsolutePath();
获取传入的File对象的路径。
listFiles();
获取所有的子目录和子文件组成的File数组。
File[] fl = file.listFiles();
listFiles(new Filefileter);
获取所有子目录。参数不可变。
listFiles(new FilenameFilter);
获取所有文件目录的名字。参数不可变。
lastModified();
获取文件最后一次修改时间。返回值表示是修改时间到1970-01-01 00:00:00的毫秒值。
getName();
获取文件的名字。
getParent();
获取父目录。
4.判断
canExecute();
判断是否是可执行文件。
canRead();
判断是否可读文件。
canWrite();
判断文件是否可写。
exists();
判断路径是否真实存在。
isAbsoute();
判断是否是绝对路径。
路径
绝对路径:以盘符或者/开头的路径。和当前路径没有任何关系。
相对路径:不以盘符或者/开头的路径。以当前路径为基准进行计算。..表示的是上一层目录。
isDirectory();
判断是否是一个目录。
isFile();
判断是否是一个文件。
isHidden();
判断是否是隐藏文件。
5.设置
setLastModified(long l);
设置文件最后一次修改时间。参数也是long类型的毫秒值。
setExecutable(boolean b);
设置此文件是否可执行文件。
setReadable(boolean readable);
设置文件是否为可读文件。
setReadable(boolean readable,boolean ownerOnly);
设置用户对文件的可读权限。
setReadOnly();
设置文件是否为只读文件。
setWritable(boolean writable);
设置文件是否为可写文件。
setWritable(boolean writable,boolean ownerOnly);
设置用户对文件的可写权限。
renameTo(new File());
重命名。如果路径没有发生改变,则表示重命名此文件;如果路径发生来改变,则表示的是剪切此文件。
练习
删除目录
需要删除这个目录下的所有子目录和子文件。
public static void main(String[] args) {
File file = new File("E:\\aaa");
delFile(file);
}
private static void delFile(File file) {
// 判断file是否为null
if (file == null) {
throw new NullPointerException("亲,文件不能为空啊~~~");
}
// 判断是一个目录还是一个文件
if (file.isDirectory()) {
// 如果是目录,获取当前目录下的所有的子文件和子目录
File[] fs = file.listFiles();
// 遍历数组
for (File f : fs) {
// 获取到该file对象之后,需要再次判断这个f是一个子文件还是一个子目录
delFile(f);
}
}
// 无论是子目录还是子文件,都需要删除
file.delete();
}
统计目录
统计java文件和class文件的个数。
public class FileExer2 {
// 记录Java文件的个数
static int javaCount = 0;
// 记录class文件的个数
static int classCount = 0;
public static void main(String[] args) {
File file = new File("E:\\workspace");
statistic(file);
System.out.println("Java文件:" + javaCount);
System.out.println("class文件:" + classCount);
}
private static void statistic(File file) {
// 判断file是否为空
if (file == null) {
throw new NullPointerException();
}
// 判断是否是一个目录
if (file.isDirectory()) {
// 获取这个目录下的所有的子文件和子目录
File[] fs = file.listFiles();
for (File f : fs) {
statistic(f);
}
} /* 在计算机中一个file如果不是目录,那么就是文件 */ else if (file.getName().endsWith(".java")) {
// 如果是文件,判断是否是一个Java文件
javaCount++;
} else if (file.getName().endsWith(".class")) {
classCount++;
}
}
}
提取文件
将某一个盘符下的所有docx文件提取到另外一个盘符下的docx目录下。
import java.io.File;
import java.io.FilenameFilter;
public class FileExer {
static File docx = new File("E:\\DOCX");
public static void main(String[] args) {
File file = new File("F:\\aaa");
get(file);
}
private static void get(File file) {
// 判断file是否为空
if (file == null) {
throw new NullPointerException();
}
// 判断file是否是一个目录
if (file.isDirectory()) {
// 获取这个目录下的所有的子目录和子文件
File[] fs = file.listFiles();
for (File f : fs) {
get(f);
}
} else if (file.getName().endsWith(".docx")) {
// 获取要提取的文件的名字
// 12.4test.docx
String name = file.getName();
// 后去 . 最后一次出现的位置
int index = name.lastIndexOf(".");
// 获取的是文件真正的名字
final String fileName = name.substring(0, index);
File[] fs = docx.listFiles(new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
return name.matches(fileName + "-\\d+\\.docx") || name.matches(fileName + "\\.docx");
}
});
// 提取文件
file.renameTo(new File(docx, fileName + (fs.length == 0 ? "" : "-" + fs.length) + ".docx"));
}
}
}