文件和目录(文件夹)的路径名的抽象表示形式。
File类代表磁盘上某一文件或文件夹(目录)
File对象代表通过某一路径确定的文件或文件夹
创建File对象时需要传入路径
file.separator :默认分隔符
路径:
绝对路径:自己指定的路径
相对路径:相对的是当前项目
Windows默认每个文件都可读,不能设置为不可读,但可以设置为不可写;所有.exe文件都默认可执行
构造方法
File(String pathname)
:通过将给定路径名字符串转换为抽象路径名来创建一个新 File 实例。File(String parent, String child)
:根据 parent 路径名字符串和 child 路径名字符串创建一个新 File 实例。File(File parent, String child)
:根据 parent 抽象路径名和 child 路径名字符串创建一个新 File 实例。
演示:
public void testConstru {
//构造方法1
File f1 = new File("E:\\A\\B\\a.txt");
File f2 = new File("E:/A/B/a.txt");
File f3 = new File("E:"+File.separator+"A"+File.separator+"B"+File.separator+"a.txt");
File f6 = new File("a.txt");
String parent = "E:\\A\\B";
String child = "a.txt";
//构造方法2
File f4 = new File(parent,child);
//构造方法3
File f5 = new File(new File(parent),child);
}
常用方法
get系列方法:
getAbsoluteFile()
:返回值类型:File;返回此抽象路径名的绝对路径名形式。(绝对路径)getAbsolutePath()
:返回值类型:String;返回此抽象路径名的绝对路径名字符串。(绝对路径)getName()
:返回值类型:String;返回由此抽象路径名表示的文件或目录的名称。getParent()
:返回值类型:String;返回此抽象路径名父目录的路径名字符串;如果此路径名没有指定父目录,则返回 null。getParentFile()
:返回值类型:File;返回此抽象路径名父目录的抽象路径名;如果此路径名没有指定父目录,则返回 null。getPath()
:返回值类型:String;将此抽象路径名转换为一个路径名字符串。(构造方法中的路径)
演示:
public void testGets() {
File f = new File("E:\\A\\B\\a.txt");
System.out.println("getAbsoluteFile():" + f.getAbsoluteFile().toString());
System.out.println("getAbsolutePath():" + f.getAbsolutePath());
System.out.println("getName():" + f.getName());
System.out.println("getParent():" + f.getParent());
System.out.println("getParentFile():" + f.getParentFile().toString());
System.out.println("getPath():" + f.getPath());
}
can系列方法:
canRead()
:返回值类型:boolen;测试应用程序是否可以读取此抽象路径名表示的文件。canWrite()
:返回值类型:boolen;测试应用程序是否可以修改此抽象路径名表示的文件。canExecute()
:返回值类型:boolen;测试应用程序是否可以执行此抽象路径名表示的文件。
演示:
public void testCans() {
File f1 = new File("C:\\A\\B\\a.txt");
System.out.println("a.txt 是否可读 ? "+f1.canRead());
System.out.println("a.txt 是否可写? "+f1.canWrite());
// 可读即就是可执行
System.out.println("a.txt 是否可执行 ? "+f1.canExecute());
// 设置只读
// f1.setReadOnly();
// 设置不可读 : windows 每个文件都可读,不可设置为不可读
// f1.setReadable(false);
// 设置不可写
// f1.setWritable(false);
// 设置不可执行 : 设置失败,当前操作的权限不够
f1.setExecutable(false);
System.out.println("c.txt 是否可读 ? "+f1.canRead());
System.out.println("c.txt 是否可写? "+f1.canWrite());
// 可读可写即就是可执行
System.out.println("c.txt 是否可执行 ? "+f1.canExecute());
}
创建:
createNewFile()
:返回值类型:boolean;当且仅当不存在具有此抽象路径名指定名称的文件时,不可分地创建一个新的空文件。mkdir()
:返回值类型:boolean;创建此抽象路径名指定的目录。(文件夹不存在)mkdirs()
:返回值类型:boolean;创建此抽象路径名指定的目录,包括所有必需但不存在的父目录。(主文件夹不存在)
演示:
public void testCreateFileOrDir() {
try{
File f1 = new File("E:\\A\\B\\c.txt");
// 当且仅当 文件不存在时创建成功
System.out.println("创建文件 ? " + f1.createNewFile());
File f2 = new File("E:\\A\\B\\C11");
// 当且仅当 文件夹不存在时创建成功,注意: 只能创建单层文件夹
System.out.println("创建文件夹 ? "+ f2.mkdir());
File f3 = new File("E:\\C1\\C2\\C3");
// 当且仅当 文件夹不存在时创建成功,注意: 可以创建多层次文件夹
System.out.println("创建文件夹 ? "+ f3.mkdirs());
}catch(Exception e){}
}
删除方法:
delete()
: 返回值类型:boolean;删除并返回是否成功删除,删除文件夹时文件夹不为空则删除失败。
演示:
public static void testDelete() {
File f1 = new File("C:\\A\\B\\c.txt");
// System.out.println("删除成功 ? " +f1.delete());
File f2 = new File("C:\\A");
// 删除文件夹,只能删除空文件夹,文件夹中有文件夹或文件都不删除
System.out.println("删除成功 ? " +f2.delete());
}
list系列方法:
list()
:返回值类型:String[];返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中的文件和目录。list(FilenameFilter filter)
:返回值类型:String[];返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中满足指定过滤器的文件和目录。listFiles()
:返回值类型:File[];返回一个抽象路径名数组,这些路径名表示此抽象路径名表示的目录中的文件。list(FilenameFilter filter)
:返回值类型:File[];返回抽象路径名数组,这些路径名表示此抽象路径名表示的目录中满足指定过滤器的文件和目录。list(FileFilter filter)
:返回值类型:File[];返回抽象路径名数组,这些路径名表示此抽象路径名表示的目录中满足指定过滤器的文件和目录。
FilenameFilter、FileFilter都是接口,需要自定义实现类,重写accept方法。
1. FilenameFilter的accept方法内有两个参数:
参数:File dir :调用list系列方法的对象所指定的文件夹
参数:String name :该文件夹内的文件名称
2. FileFilter的accept方法内有一个个参数
测试指定抽象路径名是否应该包含在某个路径名列表中。
参数:File pathname :要测试的抽象路径名
演示:
public void testList{
File file1 = new File(“E:\\A\\B”);
//返回此文件夹对象下的所有文件名
String[] listStr = file1.list();
for(String path : listStr) {
System.out.println(path);
}
//返回此文件夹对象下所有文件对象
for(File f : file1.listFiles()) {
System.out.println(f.getName());
}
}
public class MyFilenameFilter implements FilenameFilter{
@Override
public void accept(File dir, String name){
//所有以txt结尾的允许通过
if(name.endWith("txt")) {
return true;
}
return false;
}
}
public void testListFilter{
File file1 = new File(“E:\\A\\B”);
String[] listStr = file1.list(new MyFilenameFilter());
for(String path : listStr) {
System.out.println(path);
}
}
public class MyFileFilter implements FileFilter {
/*
参数:pathName 指定文件夹下所有对象
返回值:boolean 返回true,允许通过
*/
@Override
public void accept(File pathName) {
return true;
}
}
public void testList{
File file1 = new File(“E:\\A\\B”);
for(File f : file1.listFiles()) {
System.out.println(f.getName());
}
}
判断方法:
isAbsolute()
:返回值类型:boolean;测试此抽象路径名是否为绝对路径名isDirectory()
:返回值类型:boolean;测试此抽象路径名表示的文件是否是一个目录(文件夹)。isFile()
:返回值类型:boolean;测试此抽象路径名表示的文件是否是一个标准文件。isHidden()
:返回值类型:boolean;测试此抽象路径名指定的文件是否是一个隐藏文件。
5.exists()
:返回值类型:boolean;测试此抽象路径名表示的文件或目录是否存在。
演示:
public void testIs() {
File file1 = new File("E:\\A\\B\\a.txt");
System.out.println("是不是绝对路径" + file1.isAbsolute());
System.out.println("是不是文件" + file1.isFile());
System.out.println("是不是文件夹" + file1.isDirectory());
System.out.println("是不是隐藏" + file1.isHidden());
System.out.println("是不是存在" + file1.exists());
}
其他方法:
lastModified()
:返回值类型:long;返回此抽象路径名表示的文件最后一次被修改的时间。setLastModified(long time)
:返回值类型:boolean;设置此抽象路径名指定的文件或目录的最后一次修改时间。length()
:返回值类型:long;返回由此抽象路径名表示的文件的长度。renameTo(File dest)
:返回值类型:boolean;重新命名此抽象路径名表示的文件。
演示:
public void testOther() {
//最后的修改时间
File file1 = new File("E:\\A\\B\\a.txt");
SimpleDateFormat snf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
System.out.println(snf.format(file1.lastModified()));
//修改最后修改时间
file1.setLastModified(new Data().getTime());
System.out.println(snf.format(file1.lastModified()));
//获取文件字节长度
System.out.println(file1.length());
//改名
//renameTo(文件对象)
//1.创建一个新的空对象
//2.
boolean a = file1.renameTo(new File("E:\\A\\B\\A.txt"));
System.out.println(a);
}