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

Java文件操作类:File

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

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

猜你喜欢

转载自blog.csdn.net/weixin_45784666/article/details/105498508