File类
File属于java.io包下的一个操作文件或者是文件夹的类,它涉及到对文件或者文件目录的创建,删除,修改文件名,查询文件名等操作的方法,并未涉及到对文件内容的读写操作。
File类常用构造
- File(String filePath):通过一个路径创建文件
- File(String parentPath,String childPath):根据 parent 路径名字符串和 child 路径名字符串创建一个新
File
实例 - File(File parentFile,String childPath):根据 parent 抽象路径名和 child 路径名字符串创建一个新
File
实例
//路径创建文件
File file = new File("D:\\1.txt");
//父路径和子路径File
File f2 = new File("D:\\JavaStudy", "javaee")
File fatherFile = new File("D:\\demo");
File childFile = new File(fatherFile, "2.txt");//D:\\demo\\2.txt
绝对路径与相对路径
绝对路径:从盘符开始的路径,比如C:\windows\system32\cmd.exe
相对路径:从当前路径开始的路径,假设当前路径为C:\windows,描述上述路径,只需要输入system32\cmd.exe即可
路径分隔符(;)与名称分隔符(\)
路径分隔符是将路径使用 ;
进行隔开,名称分隔符相当于“D:\java\demo01”
中的\
进文件分隔
不同操作系统下的路径分隔符与名称分隔符是不一样的,因此在开发中路径尽量不写“D:\java\demo01”
成这样。j尽量使用File.separator
让路径连接在一起
File类的常用方法
- createNewFile():创建文件,存在就不创建
- mkdir():创建单级文件夹
- mkdirs():创建多级文件夹
- delete():删除File对象,只能删除文件或者空文件夹
- isDirectory():是否是文件夹
- isFile():是否是文件
- exits():文件是否存在
- canRead():是否可读
- canWrite():是否可写
- isHidden():是否隐藏
使用上面的方法:
//这样写相当于D:\1.txt
File file = new File("D:" + File.separator + "1.txt");
//判断文件名是否存在存在则,创建文件1.txt
if(!file.exists()) {
file.createNewFile();
}
//创建目录mkdir()
File folder = new File("D:\\demo");
System.out.println(folder.mkdir());
//创建多级目录mkdirs()
File folder2 = new File("D:\\text\\new");
System.out.println(folder2.mkdirs());//创建多级目录
//删除文件
//file.delete();
//删除单级空目录demo
//folder.delete();
//删除text(非空目录不可删除)
//folder2.delete();
//是否是文件
System.out.println(file.isFile());//t
//是否是目录
System.out.println(file.isDirectory());//f
//是否存在
System.out.println(file.exists());//t
//是否可读
System.out.println(file.canRead());//t
//是否可写
System.out.println(file.canWrite());//t
//是否隐藏
System.out.println(file.isHidden());//f
- renameTo(File dest):将一个File对象重名名为指定的File对象
- getAbsoultPath():获取绝对路径
- getPath():将此File转换为路径名字符串,获取的构造方法中传递的路径
- getName():获取文件或目录的名称名称
- getParent():获取上层文件目录路径
- length():获取字节数,文件夹没大小概念的
- lastModified():获取最后一次修改时间的毫秒
使用上面的方法:
File file = new File("io\\a.txt");
//文件不存在,创建文件
if(!file.exists()) {
file.createNewFile();
}
File file2 = new File("C:\\Users\\HP\\Desktop\\demo");
//获取绝对路径
System.out.println(file.getAbsolutePath());//D:\JavaStudy\JavaSE\JavaSE\io\a.txt
System.out.println(file2.getPath());//C:\Users\HP\Desktop\demo
//获取构造路径(就是当前路径)
System.out.println(file.getPath());//io\\a.txt
//获取路径下的文件名称
System.out.println(file.getName());//a.txt
System.out.println(file2.getName());//demo
//获取上层的文件路径
System.out.println(file.getParent());//io
System.out.println(file2.getParent());//C:\Users\HP\Desktop
//获取文件的大小,文件夹没大小概念,始终为0
System.out.println(file.length());//4
System.out.println(file2.length());//0
//获取最后一次修改文件的时间毫秒
System.out.println(file.lastModified());//1595237549049
单独看一下renameTo(File dest)的运用:
- 同一路径下是复制
- 不同路径下先剪切后复制
File file = new File("D:\\a.txt");//存在
File dest = new File("D:\\b.txt");//不存在
//修改的文件名在同一个路径下重命名成功
file.renameTo(dest);
//不在同一路径下先剪切后复制
File dest2 = new File("E:\\e.txt");
dest.renameTo(dest2);
看一下剩下的方法:
- String[] list():获取目录下所文件和文件夹的名称
- File[] listFiles():获取目录下所文件和文件夹的File对象
- String[] list(filenameFilter):通过指定的文件名称过滤器将不符合条件的文件过滤掉
- File[] listFiles(filenameFilter):通过指定的文件名称过滤器将不符合条件的文件过滤掉
- File[] listFiles(FileFilter filter)抽象方法:用来过滤文件的方法
- File pathname:使用ListFiles方法遍历目录,得到的每一个文件对象
File file = new File("D:\\");
//获取D盘下的所有文件的绝对路径
File[] files = file.listFiles();
for (File file2 : files) {
System.out.println(file2.getAbsolutePath());
}
获取当前项目下的所有.java的文件:
①.使用String[] list(filenameFilter)方法进行过滤文件,filenameFilter是文件过滤器接口提供过滤文件的方法:
public static void main(String[] args) throws IOException {
//.表示当前项目路径
File folder = new File(".");
checkName(folder);
}
public static void checkName(File folder) {
String[] names = folder.list(new FilenameFilter() {
//dir:文件所在的文件夹路径
//name: 文件的名称
@Override
public boolean accept(File dir, String name) {
//将文件路径生成file对象
File file = new File(dir, name);
//如果是文件夹继续检查
if(file.isDirectory()) {
checkName(file);
return false;
}
return name.endsWith(".java");
}
});
for (String flieName : names) {
System.out.println(flieName);
}
}
②File[] listFiles(filenameFilter)来过滤文件:这两种方法的是用是一摸一样的,不一样的点就是一个存文件名,一个存文件的路径而已,
public static void main(String[] args) throws IOException {
File folder = new File(".");
checkName(folder);
}
public static void checkName(File folder) {
File[] files = folder.listFiles(new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
File file = new File(dir, name);
if(file.isDirectory()) {
checkName(file);
return false;
}
return name.endsWith(".java");
}
});
for (File file : files) {
System.out.println(file.getName());
}
}
以上两种方法输出的结果是一样的!!!如果对文件名进行操作使用第一种,对文件路径进行操作用第二种。