java文件操作

File类

  • File类可以表示一个文件(如.txt,.exe文件等文件),还可以表示一个目录(文件夹),所以我们可以在程序中用File 类的对象可以表示一个文件或者目录
  • File 类的对象 还不能直接对文件进行读写操作,只能修改文件的属性

常用方法

方法描述
boolean exists()判断文件是否存在
boolean isDirectory()判断类型是否是文件夹
boolean isFile()判断类型是否是文件
long length()计算文件所包含的字节数
boolean createNewFile()创建文件
boolean delete()删除文件
boolean mkdir()创建单个文件夹
boolean mkdirs()创建目录路径的所有文件夹

创建文件

public class FileCreate {
    public static boolean fileCreate(String path){
        if(!checkPath(path))
        {
            System.out.println("路径不合法!");
            return false;
        }
        File file = new File(path);
        if(file.exists())
        {
            System.out.println("文件已存在!");
            return  false;
        }
        int index = path.lastIndexOf("/");
        if(index < 0)
        {
            index = path.lastIndexOf("\\");
        }
        String path1 = path.substring(0,index);
        String path2 = path.substring(index + 1);
        File dir = new File(path1);
        if(!dir.exists())
        {
            if(!dir.mkdirs())
            {
                System.out.println("创建文件夹失败");
                return false;
            }
        }
        File f = new File(dir, path2);
        if(!f.exists())
        {
            if(f.isFile())
            {
                try {
                    return f.createNewFile();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            else
            {
                return f.mkdirs();
            }
        }
        return true;
    }

    public static boolean checkPath(String path)
    {
        String [] strings = {"\\","/",":","*","<",">","?","|","\""};
        if(path == null || "".equals(path))
        {
            return false;
        }
        String[] str = path.split("\\\\");
        if(str.length == 1)
        {
            str = path.split("/");
        }
        if(!Character.isLetterOrDigit(str[0].charAt(0)) || !(str[0].charAt(1) == ':') || str[0].length() != 2){
            return false;
        }
        for(int i = 1; i < str.length; i++)
        {
            for(String s1 : strings)
            {
                if(str[i].contains(s1))
                {
                    return false;
                }
            }
        }
        return true;
    }
}

文件创建步骤:

1. 判断路径是否合法
本文中创建文件使用的是绝对路径。在boolean checkPath()中,将路径分割取出每一级的目录,因为是绝对路径,所以根目录是 C: 的形式,之后是判断了每级目录中是否包含了文件对象所不允许的特殊字符。
2. 创建父目录
本文将整个目录摘除掉最后一级目录后的路径作为父目录,父目录的每级目录都可以确定是一个文件夹,直接以创建文件夹的方式进行创建。
3. 创建子文件
本文将整个目录的最后一级目录称为子文件,子文件可以是文件夹,也可以是文件(如.txt,.exe文件等文件),通过判断文件类型选择相应的方式进行创建。

删除文件

public class FileDelete {
    public static boolean fileDelete(File file) {
        if (file == null || !file.exists())
        {
            return false;
        }
        if (file.isFile())
        {
            return file.delete();
        }
        else
        {
            File[] fileList = file.listFiles();
            if (fileList != null)
            {
                for (File f : fileList)
                {
                    fileDelete(f);
                }
            }
        }
            return file.delete();
    }
}

进行删除操作时需要注意:如果文件对象的类型是文件(如.txt,.exe文件等文件),可以直接进行删除;如果是目录(即文件夹),则需要将文件夹内的所有文件对象都进行删除后,才可以将本文件夹删除。boolean fileDelete()中就是用了递归将文件对象一层层的删除掉。

统计文件大小

public class FileGetSize {
    public static long fileGetSize(File file){
        if (file == null || !file.exists())
        {
            return 0;
        }
        long size = 0;
        if(file.isFile())
        {
            return file.length();
        }
        else
        {
            File[] fileList = file.listFiles();
            if(fileList != null)
            {
                for(File f:fileList)
                {
                    size = size + fileGetSize(f);
                }
            }
        }
        return size;
    }
}

统计文件对象所包含的字节数,对于类型是文件夹的文件对象来说,没有直接统计的方法,类型是文件的文件对象可以使用file.length()直接获取文件所包含的字节数。所以使用递归的方式,一层层进行统计。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值