【Java基础】File类的常用方法和属性及代码案例

File类简介

File类在Java中用来表示一个文件或目录

  • 可以获取文件目录属性(创建时间,上一次修改时间,是否是文件,是否是目录)
  • 可以对文件和目录进行创建、删除
  • File不能获取文件的内容

File类常用属性

File类有几个类似separator的静态字段,都是与系统相关的,在编程时应尽量使用。

File.separator

  • 在Windows与Linux下的路径分隔符是不一样的,Java代码直接使用绝对路径时,跨平台会暴出“No such file or diretory”的异常, 因为绝对路径是以盘符开头,Windows系统的盘符为“”D: E:”, Linux系统的盘符都是以 "/"开头

  • File.separator表示系统目录中的间隔符,就是斜线“/”,

  • 在 UNIX 系统上,此字段的值为 '/';在 Windows 系统上,它为'\'(由于在Java中反斜杠表示转义符号, 所以需要将\转义 \\)

如: 在temp目录下创建test.txt文件,

//在Windows写法:以 “C:/D:”盘开头
File file1 = new File ("D:\\tmp\\test.txt");
//在Linux写法::以 "/”开头
File file2 = new File ("/tmp/test.txt");

如果要考虑跨平台,则最好是这么写:

File file= new File("D:" + File.separator + "tmp" + File.separator, "test.txt");

File.pathSeparator

  • 与系统有关的路径分隔符。此字符用于分隔以路径列表 形式给定的文件序列中的文件名。在 UNIX 系统上此字段为':';在 Microsoft Windows 系统上,它为 ';'

如果创建File对象

  • 可以通过相对路径绝对路径构造 File对象
  1. 相对路径
File(String parent, String child)  ==> File("E:/xp/test","2.jpg")
File(File parent, String child)    ==> File(new File("E:/xp/test"),"2.jpg")
  1. 绝对路径
File(String name);  ==> File("E:/xp/test/2.jpg")
//没有盘符: 以 user.dir (System.getProperty("user.dir"))构建,也就是当前目前项目的路径:E:\resource\java-base-demo\
File file =new File("test.txt") //即:System.getProperty("user.dir")/test.txt

File类的常用方法

获取
方法 说明
getName() 获取文件或目录名
getPath() 获取相对路径
getAbsoluteFile() 获取绝对路径所对应的File对象
getAbsolutePath() 获取绝对路径
getParent() 获取父目录 (相对路径的父目录,可能为null 如. 删除本身后的结果)
LastModified() 获取文件的最后修改时间
Length() 获取文件长度 ,为字节数 不能读取文件夹的长度
ToString() 获取文件状态的字符串
高级获取
方法 说明
String[] list() 获取路径表示目录下的所有文件和目录名称
String[] list(FilenameFilter filter) 获取满足过滤器FilenameFilter条件的所有目录或文件名称
File[] listFiles() 获取路径表示目录下的所有文件和目录对象
File[] listFiles(FilenameFilter filter) 获取满足过滤器FilenameFilter条件的所有目录或文件对象
File[] listRoots() 获取系统的根目录, windows为“D/C/F”盘 ,Linxu为 “/”目录

使用文件过滤器FilenameFilter获取目录下指定文件

    //如果是文件,且是.jpg结尾的图片,则返回到 subFiles 
	File []	subFiles =src.listFiles(new FilenameFilter(){
				@Override
				/**
				 * dir 代表src
				 * name 代表文件名
				 */
				public boolean accept(File dir, String name) {
					System.out.println(dir.getAbsolutePath());
					return  new File(dir,name).isFile()&&name.endsWith(".jpg");
				}
				
			});
判断
方法 说明
CanWrite() 判断文件是否可写
CanRead() 判断文件是否可读
Exists() 判断文件或者目录是否存在
IsFile() 判断该路径指示的是否是文件
IsDirectory() 判断该路径指示的是否是目录
isHidden() () 判断文件是否隐藏
创建和删除
方法 说明
mkdir 创建目录(必须确保 父目录存在,如果不存在,创建失败)
mkdirs() 创建目录,如果父目录不存在则一同创建
createNewFile() 创建新文件,不存在才创建,存在返回true
static createTempFile(前缀3个字节长,后缀默认.temp) 创建临时文件到默认临时目录,临时文件的默认目录位于System.getProperty("java.io.tmpdir")
static createTempFile(前缀3个字节长,后缀默认.temp,目录) 创建临时文件到指定目录(下面举例)
delete() 删除文件
deleteOnExit() 虚拟机退出后删除,常用于删除临时文件,
renameTo() 重命名文件

临时文件创建

//static createTempFile(前缀3个字节长,后缀默认.temp) 默认临时空间(临时文件的默认目录位于`System.getProperty("java.io.tmpdir")`)
//static createTempFile(前缀3个字节长,后缀默认.temp,目录)
File temp= File.createTempFile("tes", ".temp",new File("E:/data/test"));

//会在E:/data/test创建临时文件 tes8926064512956475651.temp,  "8926064512956475651"这串数字是随机生成的

递归输出子孙级目录|文件的名称(绝对路径)

/**
	 * 
	 * @param src 输出路径
	 */
	public static void printName(File src){
		if(null==src || !src.exists()){
			return ;
		}
		System.out.println(src.getAbsolutePath());
		if(src.isDirectory()){ //文件夹
			for(File sub:src.listFiles()){
				printName(sub);
			}
			
		}
	}

面向对象方式递归输出子孙级目录|文件的大小/文件总数/目录总数

import java.io.File;
/**
 *  使用面向对象: 统计文件夹的大小
 */
public class DirCount {
	//大小
	private long len;
	//文件夹路径
	private String path;
	//文件的个数
	private int fileSize;
	//文件夹的个数
	private int dirSize;
	//源
	private File src;
	public DirCount(String path) {
		this.path = path;
		this.src = new File(path);
		count(this.src);
	}	
	
	//统计大小
	private  void count(File src) {	
		//获取大小
		if(null!=src && src.exists()) {
			if(src.isFile()) {  //大小
				len+=src.length();
				this.fileSize++;
			}else { //子孙级
				this.dirSize++;
				for(File s:src.listFiles()) {
						count(s);
				}
			}
		}
	}	
	
	public long getLen() {
		return len;
	}
	public int getFileSize() {
		return fileSize;
	}
	public int getDirSize() {
		return dirSize;
	}

	public static void main(String[] args) {
		DirCount dir = new DirCount("D:\\data\\test");		
		System.out.println(dir.getLen()+"-->"+dir.getFileSize()+"-->"+dir.getDirSize());

	}
}

Path类

Java标准类库还提供了一个Path对象,它位于·java.nio.file·包。Path对象和File对象类似,但操作更加简单:

    public static void main(String[] args) throws IOException {
        Path pathObj = Paths.get(".", "project", "study"); // 构造一个Path对象

        System.out.println("pathObj=>"+pathObj);

        Path absolutePath = pathObj.toAbsolutePath(); // 转换为绝对路径
        System.out.println("absolutePath=>"+absolutePath);

        Path normalizePath = absolutePath.normalize(); // 转换为规范路径
        System.out.println("normalizePath=>"+normalizePath);

        File file = normalizePath.toFile(); // 转换为File对象
        System.out.println("file=>"+file);

        for (Path path : Paths.get("..").toAbsolutePath()) { // 可以直接遍历Path
            System.out.println("  " + path);
        }
    }

如果需要对目录进行复杂的拼接、遍历等操作,使用Path对象更方便。
在这里插入图片描述

发布了62 篇原创文章 · 获赞 109 · 访问量 5286

猜你喜欢

转载自blog.csdn.net/qq877728715/article/details/103307962