File类
1、说明
File类用于封装一个路径,这个路径可以是从系统盘符开始的绝对路径,也可以是相对于当前目录而言的相对路径。封装的路径可以指向一个文件,也可以指向一个目录,在File类中提供了针对这些文件或目录的一些常规操作。
2、File相关代码
/**
*File: Java中的File类可以将文件或文件夹的路径,封装成对象。并通过代码,对这些文件或文件夹对象,进行操作。
*相对路径:相对于当前项目下的文件或文件夹。
*绝对路径:从盘符的根目录开始,一直指向到某个具体的文件。
*/
public static void main(String[] args){
File file = new File("D:\\c.flv");
System.out.println(file.exists());
File file2 = new File("bbb");
System.out.println(file2.exists());
}
3、File类常用构造方法
方法声明 功能描述
File(String pathname) 通过指定的一个字符串类型的文件路径来创建一个新的File对象
File(String parent,String child) 根据指定的一个字符串类型的父路径和一个字符串类型的子路径(包括文件名称)创建一个File对象
File(File parent,String child) 根据指定的File类的父路径和字符串类型的子路径(包括文件名称)创建一个File对象
4、构造方法的相关代码
public static void main(String[] args){
File f1 = new File(“D:”,“a.flv”);
System.out.println(f1.exists());
//File(String parent,String child)
File f2 = new File(new File("D:"),"a.flv");
System.out.println(f2.exists());
}
5、File类的普通方法
public class Demo2_FileMethod{
public static void main(String[] args){
}
private static void method4(){
File f = new File("D:\\a.flv");
//boolean isFile() 判断当前对象是否是文件
System.out.println(f.isFile());
//boolean isDirectory() 判断当前对象是否是文件夹
System.out.println(f.isDirectory());
System.out.println(f.isAbsolute());
//long lastModified() 获取最后修改时间的毫秒值
long time = f.lastModified();
System.out.println(new Date(time));
//long length() 返回文件大小
long length = f.length();
System.out.println(length);
}
private static void method3(){
//boolean canRead()
File f = new File("D:\\a.flv");
System.out.println(f.canRead());
//boolean canWrite()
System.out.println(f.canWrite());
}
private static void method2(){
File f = new File("D:\\a.flv");
//1.getName() 获取文件\文件夹名称
System.out.println(f.getName());
//2.getPath() 获取对象构造方法中封装的路径
System.out.println(f.getPath());
//3.getAbsolutePath() 获取绝对路径
System.out.println(f.getAbsolutePath());
//4.getParent() 获取父级路径
System.out.println(f.getParent());
}
public static void method1() throws IOException{
//1.delete方法,删除文件或文件夹
File f1 = new File("D:\\b.flv");
System.out.println(f1.delete());
//2.createNewFile(); 创建一个文件,返回是否创建成功
System.out.println(f1.createNewFile());
}
}
public class demo2_FileMethod{
/**
* String[] list() 返回当前文件夹下所有的文件和文件夹名称
*
* String[] list(FilenameFilter filter) 返回当前文件夹下所有的文件和文件夹名称,带有筛选效果
*
* File[] listFiles() 返回当前文件夹下所有的文件和文件夹对象
*/
public static void main(String[] args) throws IOException{
File f = new File("D");
File[] listFiles = f.listFiles();
for(File file : listFiles){
if(file.isDirectory()){
System.out.println(file.toString());
}
}
private static void method5(){
File f = new File("D:");
String[] sArr = f.list(new FilenameFilter(){
@Override
public boolean accept(File dir, String name){
File ff = new File(dir,name);
return ff.isDirectory();
}
});
for(String s : sArr){
System.out.println(string);
}
}
}
6、遍历目录下的文件
6.1 说明
File类中提供了一个重载的list(FilenameFilter filter)方法,该方法接收一个FilenameFilter接口类型的参数,其中定义了一个抽象方法accept(File dir,String name)用于依次对指定File的所有子目录进行迭代。
/**
* String[] list() 返回当前文件夹下所有的文件和文件夹名称
*
* String[] list(FilenameFilter filter) 返回当前文件夹下所有的文件和文件夹名称,带有筛选效果
*
* File[] listFiles() 返回当前文件夹下所有的文件和文件夹对象
*/
public class Demo3_FileMethod{
public static void main(String[] args){
}
public static void printFile(File dir){
//1.获取传入文件夹下的所有文件和文件夹对象
File[] files = dir.listFiles();
//2.遍历数组,获取到每一个文件和文件夹对象
for(File file : files){
//3.如果是文件就打印该文件的名称
if(file.isFile())
{
System.out.println(file.getName());
}else if(file.isDirectory()){
//4.如果是文件夹,就递归调用该方法
if(file.listFiles()!=null){
printFile(file);
}
}
}
}
private static void method2(){
//筛选遍历扩展名“.txt”文件
File f = new File("D:");
if(f.isDirectory()){
String[] sArr = f.list((dir,name)->name.endsWith(".txt"));
Arrays.stream(sArr).forEach(System.out::println);
}
}
private static void method1(){
File f = new File("D:");
if(f.isDirectory()){
String[] sArr = f.list();
Arrays.stream(sArr).forEach(System.out::println);
}
}
}
7、删除文件及目录
/**
*
* delete : 该方法只能删除文件,或者空文件夹
*
*/
public class Demo_DelDir{
public static void main(String[] args){
File f = new File("F:\\测试数据");
System.out.println(f.delete());
}
}
//Java中的delete方法是不走回收站的,不要使用重要的数据进行测试
public class Demo_DelDir{
public static void main(String[] args){
del(new File("F:\\测试数据"));
}
public static void del(File dir){
File[] listFiles = dir.listFiles();
for(File file : listFiles){
if(file.isFile()){
//如果是文件,就可以直接删除
file.delete();
}else if(file.isDirectory()){
//递归调用该方法
if(file.listFiles()!=null){
del(file);
}
}
}
//当所有的文件都删除后,单独删除空文件夹
dir.delete();
}
}