JAVA File(十六)

本文详细介绍了Java中的File类,包括其构造方法,用于判断路径类型、检查文件/目录存在性、获取文件属性、创建和删除文件/目录等常用成员方法,以及示例代码演示了如何在实际编程中运用这些功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

File(十六)

File对象表示路径,可以是文件,可以是文件夹,该路径可存在,可不存在。
绝对路径:绝对路径是带盘符的。
相对路径:相对路径不带盘符,默认到当前项目下去找。

构造方法

//格式1
public File(String pathname)
把字符串表示的路径变成File对象

//格式2
public File(String parent,String child)
把父级路径和子级路径进行拼接

//格式3
public File(File parent,String child)
//把父级路径对应文件对象和子级路径进行拼接

范例

import java.io.File;

public class Test{
    public static void main(String[] args){
        //public File(String pathname)
        String pathname="d:\\javafiletest\\a.txt";
        File file1=new File(pathname);
        System.out.println(file1);

        //public File(String parent,String child)
        String parent1="d:\\javafiletest";
        String child1="a.txt";
        File file2=new File(parent1,child1);
        System.out.println(file2);

        //public File(File parent,String child)
        File file3=new File("d:\\javafiletest");
        String child2="a.txt";
        File file4=new File(file3,child2);
        System.out.println(file4);
    }
}
/*
d:\javafiletest\a.txt
d:\javafiletest\a.txt
d:\javafiletest\a.txt
*/

常用成员方法

判断

isDirectory

格式

public boolean isDirectory()

说明:判断此路径名表示的File是否为文件夹

isFile

格式

public boolean isFile()

说明:判断此路径名表示的File是否为文件

exits

格式

public boolean exits()

说明:判断此路径名表示的File是否存在

范例
import java.io.File;

public class Test{
    public static void main(String[] args){
        File file=new File("d:\\javafiletest\\a.txt");
        System.out.println("isDirectory:"+file.isDirectory());//false
        System.out.println("isFile:"+file.isFile());//true
        System.out.println("exists:"+file.exists());//true
        System.out.println();

        File file1=new File("d:\\javafiletest\\b");
        System.out.println("isDirectory:"+file1.isDirectory());//true
        System.out.println("isFile:"+file1.isFile());//false
        System.out.println("exists:"+file1.exists());//true
        System.out.println();

        File file2=new File("d:\\javafiletest\\c");
        System.out.println("isDirectory:"+file2.isDirectory());//false
        System.out.println("isFile:"+file2.isFile());//false
        System.out.println("exists:"+file2.exists());//false
    }
}
/*
isDirectory:false
isFile:true
exists:true

isDirectory:true
isFile:false
exists:true

isDirectory:false
isFile:false
exists:false
*/

获取

length

格式

public long length()

说明:返回文件的大小(单位字节),无法获得文件夹的大小,若使用该方法返回文件夹大小,会返回错误值

getAbsolutePath

格式
public String getAbsolutePath()
说明:返回文件的绝对路径

getPath

格式
public String getPath()
说明:返回定义文件时使用的路径

getName

格式
public String getName()
说明:返回文件的名称,带后缀,若返回文件夹,则不带后缀,就是文件夹的名字

lastModified

格式
public long lastModified()
说明:返回文件的最后修改时间

范例
import java.io.File;
public class Test{
    public static void main(String[] args){
        File file=new File("D:\\javafiletest\\a.txt");
        File directory=new File("D:\\javafiletest\\b");
        System.out.println("length方法");
        System.out.println(file.length()+"字节");
        System.out.println(directory.length()+"字节");
        System.out.println();

        System.out.println("getAbsolutePath方法");
        File file1=new File("practice\\b.txt");
        System.out.println(file.getAbsoluteFile());
        System.out.println(file1.getAbsoluteFile());
        System.out.println();

        System.out.println("getPath方法");
        System.out.println(file.getPath());
        System.out.println(file1.getPath());
        System.out.println();

        System.out.println("getName方法");
        System.out.println(file.getName());
        System.out.println(directory.getName());
        System.out.println();

        System.out.println("lastModified方法");
        int l=(int)file.lastModified();
        System.out.println(l);
    }
}
/*
length方法
7字节
0字节

getAbsolutePath方法
D:\javafiletest\a.txt
D:\Javacode\practice\practice\b.txt

getPath方法
D:\javafiletest\a.txt
practice\b.txt

getName方法
a.txt
b

lastModified方法
389686339
*/

创建

createNewFile

格式
public boolean createNewFile()
说明:创建一个新的空的文件
细节:

  1. 若当前路径表示的文件是不存在的,则创建成功,方法返回true
  2. 若当前路径表示的文件是存在的,则创建失败,方法返回false
  3. 若父级路径是不存在的,那么方法会有异常IOException
  4. createNewfFile方法创建的一定是文件,若路径中不包含后缀名,则创建一个没有后缀的文件
mkdir

格式
public boolean mkdir()
说明:创建单级文件夹
细节

  1. Windows当中路径是唯一的,若当前路径已存在,则创建失败,返回false
  2. mkdir方法只能创建单级文件夹,无法创建多级文件夹
mkdirs

格式
public boolean mkdirs()
说明:创建多级文件夹

范例
//d:\javafiletest文件夹初始为空
import java.io.File;
import java.io.IOException;

public class Test{
    public static void main(String[] args) throws IOException {
        System.out.println("createNewFile方法");
        File file1=new File("D:\\javafiletest\\a.txt");
        boolean flag1=file1.createNewFile();
        System.out.println(flag1);

        File file2=new File("D:\\javafiletest\\a.txt");
        boolean flag2=file2.createNewFile();
        System.out.println(flag2);

        File file3=new File("D:\\javafiletest\\a");
        boolean flag3=file3.createNewFile();
        System.out.println(flag3);

        File file4=new File("D:\\aaa\\a.txt");
        boolean flag4=file4.createNewFile();
        System.out.println(flag4);
    }
}
/*
createNewFile方法
true
false
true
Exception in thread "main" java.io.IOException: 系统找不到指定的路径。
	at java.io.WinNTFileSystem.createFileExclusively(Native Method)
	at java.io.File.createNewFile(File.java:1012)
	at Test.main(Test.java:20)
*/
d:\javafiletest文件夹初始为空
import java.io.File;
import java.io.IOException;

public class Test{
    public static void main(String[] args) throws IOException {
        System.out.println("mkdir方法");
        File file5=new File("D:\\javafiletest\\a");
        System.out.println(file5.mkdir());

        File file6=new File("D:\\javafiletest\\b\\a");
        System.out.println(file6.mkdir());
        System.out.println();

        System.out.println("mkdirs方法");
        File file7=new File("D:\\javafiletest\\b\\a");
        System.out.println(file7.mkdirs());

    }
}
/*
mkdir方法
true
false

mkdirs方法
true
*/

删除

delete

格式
public boolean delete()
说明:删除文件、空文件夹
细节

  1. 若删除的是文件,则直接删除,不走回收站
  2. 若删除的是空文件夹,则直接删除,不走回收站
  3. 若删除的是有内容的文件夹,则删除失败
/*
d:\\javafiletest文件下有三条路径
‪D:\javafiletest\a
‪D:\javafiletest\b\b.txt
‪D:\javafiletest\c.txt
*/
import java.io.File;
public class Test{
    public static void main(String[] args){
        System.out.println("delete方法");
        File file1=new File("D:\\javafiletest\\a");
        System.out.println(file1.delete());

        File file2=new File("D:\\javafiletest\\c.txt");
        System.out.println(file2.delete());

        File file3=new File("D:\\javafiletest\\b");
        System.out.println(file3.delete());
    }
}
/*
delete方法
true
true
false
*/

获取并遍历

listFiles

格式
public File[] listFiles()
说明:获取当前该路径下所有内容
细节

  • 当调用者File表示的路径不存在时,返回null
  • 当调用者File表示的路径是文件时,返回null
  • 当调用者File表示的路径是一个空文件夹时,返回一个长度为0的数组
  • 当调用者File表示的路径是一个有内容的文件夹时,将里面所有文件和文件夹的路径放在File数组中返回
  • 当调用者File表示的路径是一个有隐藏文件的文件夹时,将里面所有文件和文件夹的路径放在File数组中返回,包含隐藏文件
  • 当调用者File表示的路径是需要权限才能访问的文件夹时,返回null
范例
import java.io.File;
public class Test{
    public static void main(String[] args){
        System.out.println("listFiles方法");
        File file=new File("D:\\javafiletest");
        File[] files=file.listFiles();
        for (File file1:files){
            System.out.println(file1);
        }
    }
}
/*
listFiles方法
D:\javafiletest\a
D:\javafiletest\b
D:\javafiletest\c.txt
D:\javafiletest\d.txt
*/

范例

例1

/*
true
*///需求:在当前模块下的aaa文件夹中创建一个a.txt文件
import java.io.File;
import java.io.IOException;

public class Test{
    public static void main(String[] args) throws IOException {
        File file=new File("aaa");
        System.out.println(file.mkdirs());
        File file1=new File(file,"a.txt");
        boolean flag=file1.createNewFile();
        if(flag){
            System.out.println("创建成功");
        }else {
            System.out.println("创建失败");
        }
    }
}
/*
创建成功
*/

例2

//需求:定义一个方法寻找d:\\javafiletest文件夹中,是否存在以.txt为结尾的文件(不考虑子文件夹)
import java.io.File;

public class Test{
    public static void main(String[] args){
        File file = new File("d:\\javafiletest");
        if(findtxt(file)){
            System.out.println("存在");
        }else {
            System.out.println("不存在");
        }
    }
    public static boolean findtxt(File file){
        File[] files=file.listFiles();
        for (File f:files){
            if(f.isFile()&&f.getName().endsWith(".txt")){
                return true;
            }
        }
        return false;
    }
}

例3

//需求:找到d:\\javafiletest文件夹中所有以.txt结尾的文件
import java.io.File;

public class Test{
    public static void main(String[] args){
        File file = new File("d:\\javafiletest");
        findtxt(file);
    }
    public static void findtxt(File file){
        File[] files=file.listFiles();
        for (File f:files){
            if(f.isDirectory()){
                findtxt(f);
            }else{
                if(f.getName().endsWith(".txt")){
                    System.out.println(f);
                }
            }
        }
    }
}

例4

//需求:删除一个多级文件夹
import java.io.File;

public class Test{
    public static void main(String[] args){
        File file = new File("d:\\javafiletest\\test");
        delete(file);
    }
    public static void delete(File file){
        File[] files=file.listFiles();
        for (File f:files){
            if(f.isFile()){
                f.delete();
            }else {
                delete(f);
            }
        }
        file.delete();
    }
}

例5

//计算文件总大小
import java.io.File;

public class Test{
    public static void main(String[] args){
        File file = new File("d:\\javafiletest");
        System.out.println(statistic(file));
    }
    public static long statistic(File file){
        File[] files=file.listFiles();
        long sum=0;
        for(File f:files){
            if(f.isFile()){
                sum+=f.length();
            }else {
                sum+=statistic(f);
            }
        }
        return sum;
    }
}
//36987

例6

/*
需求:统计一个文件夹中每种文件的个数并打印。(考虑子文件夹)
打印格式:
txt:3个
md:4个
doc:5个
*/
import java.io.File;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;

public class Test{
    public static void main(String[] args){
        File file = new File("d:\\javafiletest");
        HashMap<String,Integer> hm=getCount(file);
        Set<Map.Entry<String,Integer>> entries=hm.entrySet();
        for (Map.Entry<String,Integer> entry:entries){
            System.out.println(entry.getKey()+":"+entry.getValue());
        }

    }
    public static HashMap<String,Integer> getCount(File file){
        HashMap<String,Integer> hm=new HashMap<>();
        File[] files=file.listFiles();
        for (File f:files) {
            //文件
            if(f.isFile()){
                String[] splits=f.getName().split("\\.");
                int length=splits.length;
                if(length!=1){
                    String s=splits[splits.length-1];
                    if(hm.containsKey(s)){
                        int count=hm.get(s);
                        count++;
                        hm.put(s,count);
                    }else {
                        hm.put(s,1);
                    }
                }
            }
            //文件夹
            else {
                HashMap<String,Integer> hmSon=getCount(f);
                Set<Map.Entry<String,Integer>> entries=hmSon.entrySet();
                for (Map.Entry<String,Integer> entry:entries){
                    String key=entry.getKey();
                    int value=entry.getValue();
                    if(hm.containsKey(key)){
                        int i=hm.get(key);
                        i=i+value
                        hm.put(key,i);
                    }else{
                        hm.put(key,value);
                    }
                }
            }
        }
        return hm;
    }
}
/*
txt:7
xlsx:3
md:2
doc:2
*/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值