Java学习总结:41(文件操作类:File)

Java文件操作类:File

在java.io包中,如果要进行文件自身的操作(例如:创建、删除等),只能依靠java.io.File类完成。
File类的常用操作方法

No.方法类型描述
1public File(String pathname)构造传递完整文件操作路径
2public File(File parent,String child)构造设置父路径与子文件路径
3public boolean createNewFile() throws IOException普通创建新文件
4public boolean exists()普通判断给定路径是否存在
5public boolean delete()普通删除指定路径的文件
6public File getParentFile()普通取得当前路径的父路径
7public boolean mkdirs()普通创建多级目录
8public long length()普通取得文件大小,以字节为单位返回
9public boolean isFile()普通判断给定路径是否是文件
10public boolean isDirectory()普通判断给定路径是否有目录
11public long lastModified()普通取得文件的最后一次修改日期时间
12public String[] list()普通列出指定目录中的全部内容
13public File[] listFiles()普通列出所有的路径以File类对象包装

例:文件基本操作

Created with Raphaël 2.2.0 开始 实例化File类对象(设置完整路径) 文件是否存在?exists()判断 创建新文件 结束 使用delete()删除文件 yes no
package Project.Study.FileClass;

import java.io.File;

public class Test1 {
    public static void main(String[]args) throws Exception {
        File file=new File("d:\\test.txt");//设置文件的路径
        if (file.exists()){	//如果存在的话返回“true”,否则就返回“false”
            file.delete();  //存在就将原文件删除
        }else{
            System.out.println(file.createNewFile());//不存在该文件就创建文件
        }
    }
}

关于路径分隔符
在Windows系统下,我们使用“\”(本质为“\”)作为了分隔符,但在Linux系统中,路径分隔符为“/”,这样就出现了一个问题,在不同操作系统下的路径分隔符不一样。因此,在java.io.File类里面提供有一个路径分隔符常量:public static final String separator,利用该常量可以在不同操作系统中自动转化为适合于该操作系统的路径分隔符。所以,在实际开发中,往往会使用如下形式的操作代码:

File file=new File("d:"+File.separator+"test.txt");//设置文件的路径

例:创建带路径的文件

Created with Raphaël 2.2.0 开始 实例化File类对象(设置完整路径) 父路径是否存在? 创建新文件 结束 创建父路径 file.getParentFile.mkdirs(); yes no
package Project.Study.FileClass;

import java.io.File;

public class Test2 {
    public static void main(String[] args) throws Exception {
        File file1 = new File("d:" + File.separator + "IDEA" + File.separator + "JAVA1" + File.separator + "src" + File.separator + "Project" + File.separator + "Study" + File.separator + "FileClass" + File.separator + "test.txt");
        File file2 = new File("d:" + File.separator + "IDEA" + File.separator + "JAVA1" + File.separator + "src" + File.separator + "Project" + File.separator + "Study" + File.separator + "FileClass" + File.separator + "1" + File.separator + "test.txt");
        if (!file1.getParentFile().exists()) {//现在父路径不存在
            file1.getParentFile().mkdirs();//直接创建父路径
        }
        System.out.println(file1.createNewFile());//创建新文件
        if (!file2.getParentFile().exists()) {
            file2.getParentFile().mkdirs();
        }
        System.out.println(file2.createNewFile());

    }
}

结果:
在这里插入图片描述
直接多出来一个名称为“1”的文件夹,证明上程序中的对象file2创建父路径成功了。

例:取得文件或目录的信息

package Project.Study.FileClass;

import java.io.File;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.Date;

public class Test3 {
    public static void main(String[]args)throws Exception{
        File file=new File("d:"+File.separator+"my.jpg");//设置文件路径
        if (file.exists()){
            System.out.println("是否有文件:"+(file.isFile()));
            System.out.println("是否是目录:"+(file.isDirectory()));
            //文件大小是按照字节单位返回的数字,所以需要将字节转换为兆(M)的单元
            //但是考虑到小数点问题,所以使用BigDecimal处理
            System.out.println("文件大小:"+(new BigDecimal((double)file.length()/1024/1024).divide(new BigDecimal(1),2,BigDecimal.ROUND_HALF_UP))+"M");
            //返回的日期是以long的形式返回,可以利用SimpleDateFormat进行格式化操作
            System.out.println("上次修改时间:"+new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date(file.lastModified())));
        }
    }
}
//结果:
//是否有文件:true
//是否是目录:false
//文件大小:0.10M
//上次修改时间:2020-04-13 10:58:09

例:列出目录信息

package Project.Study.FileClass;

import java.io.File;

public class Test4 {
    public static void main(String[]args){
        File file=new File("d:"+File.separator);
        if (file.isDirectory()){//判断当前路径是否为目录
            File[]result=file.listFiles();
            for (File x:result
                 ) {
                System.out.println(x);
            }
        }
    }
}
//结果:
//d:\$RECYCLE.BIN
//d:\blog
//d:\CSDN博客
//d:\Github_Daily code
//d:\Github_Holiday-repository
//d:\IDEA
//d:\Inno Setup 6
//d:\JAVA
//d:\JAVA_study
...

上程序列出了我D盘当前路径中的所有内容。

例:列出指定目录下的所有文件及子目录信息

Created with Raphaël 2.2.0 开始 实例化File类对象(设置完整路径) 调用print()方法 路径是否 为目录? 列出目录中的 信息file.listFile() 信息可以 列出? 循环File()数组 输出File类对象(取得文件完整路径) 结束 yes no yes no
package Project.Study.FileClass;

import java.io.File;

public class Test5 {
    public static void main(String[]args){
        File file=new File("d:"+File.separator);    //定义操作路径
        print(file);                                //列出目录
    }

    /**
     * 列出目录结构,此方法采用递归调用方式
     * @param file 要列出目录的路径
     */
    public static void print(File file){
        if (file.isDirectory()){            //路径为目录
            File[]result=file.listFiles();  //列出子目录
            if (result!=null){              //目录可以列出
                for (File x:result) {                    
                    print(x);               //递归调用
                }
            }
        }
        System.out.println(file);           //直接输出完整路径
    }
}
//结果:
//d:\vs2013\Common7\Tools\2052\vcupgradeui.dll
//d:\vs2013\Common7\Tools\2052
//d:\vs2013\Common7\Tools\errlook.exe
//d:\vs2013\Common7\Tools\errlook.hlp
//d:\vs2013\Common7\Tools\guidgen.exe
//d:\vs2013\Common7\Tools\makehm.exe
//d:\vs2013\Common7\Tools\ProjectComponents\Microsoft.Collections.Immutable.dll
//...
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值