【Java文件流】管理文件和文件夹:File类

2023-10-27

Java中不像C、C++那样设有专门的文件打开、关闭、跳转等方式,直接交给File类管理,开放几个方法,直接操作文件和文件夹。这十分利于新手入门。


File类的功能:

  1. 将操作系统中的文件、目录(文件夹)、路径,封装成File对象;
  2. 提供操作以上三种的方法函数;

方法

Java的API上都有以下的所讲方法。可以直接看API学习,也可以看别人写的文章学习。我的这篇文件的所讲述相关方法,首先是基于API,将其简略化,再辅助代码,更利于新手学习,以及对我以后复习时使用。

构造方法

 File(File 父文件夹,String 文件名)
 File(String 文件绝对路径)
 File(String 父文件夹,String 文件名)

三种构造方法的使用

import java.io.File;

public class Main {
	public static void main(String[] args) {
		function();
	}
	public static void function(){
		//1. File(String pathname) 把String字符串构成一个File对象,不检测这个路径是否合法
		File file01 = new File("D:\\test"); //第一个'\'是转移字符,第二个'\'是路径分隔符;
		System.out.println(file01); //输出:D:\test

		//2. File(File parent, String child)
		File parent = new File("D:\\test\\");
		File file02 = new File(parent,"a.txt");
		System.out.println(file02); //输出:D:\test\a.txt
		
		//3. File(String parent, String child)
		String pp = "D:\\test\\";
		File file03 = new File(pp,"b.txt");
		System.out.println(file03); //输出:D:\test\b.txt
	}
}

路径问题

  • 绝对路径: 该文件在硬盘上的完整路径。绝对路径一般都是以盘符开头的。
  • 相对路径: 相对路径就是资源文件相对于当前程序所在的路径。“.”当前路径;“…”上一级路径;

注意: 如果程序当前所在的路径与资源文件不是在同一个盘下面,是没法写相对路径的。

File file = new File(".");
System.out.println("当前路径是:"+ file.getAbsolutePath()); 	//获取当前的绝对路径

目录分隔符:

  1. 在windows机器上的目录分隔符是 \ ,在Linux机器上的目录分隔符是/ .
  2. 在windows上面\ 与 / 都可以使用作为目录分隔符。 而且,如果写/ 的时候只需要写一个即可。
  3. File中的分割符:File.pathSeparator:返回路径的分割符(在配置环境变量时各个Path路径的分割)。File.separator:返回目录名称的风格符 (各级目录之间的分割)。

创建文件、文件夹方法

使用方法:
由File对象直接调用

  1. boolean createNewFile():在new File()时里面的参数指定的位置创建一个空文件;创建的文件路径和文件名,由File对象的构造方法中给出;成功返回true,已存在就不创建,然后返回false(下同)。
  2. boolean mkdir():在new时指定位置创建目录,这只会创建最后一级目录,如果上级目录不存在就抛异常。
  3. boolean mkdirs():在指定位置创建目录,这会创建路径中所有不存在的目录。
  4. boolean renameTo(File dest):重命名文件或文件夹,也可以操作非空的文件夹,文件不同时相当于文件的剪切,剪切时候不能操作非空的文件夹。

删除文件、文件夹方法

使用方法:
由File对象直接调用

1)delete() 删除文件或一个空文件夹,如果是文件夹且不为空,则不能删除;成功返回true,失败返回false。当执行方法时就立即删除该文件。删除一个文件夹,这个文件夹下面不能有其他的文件和文件夹。
2)deleteOnExit() 在虚拟机终止时,请求删除此抽象路径名表示的文件或目录,保证程序异常时创建的临时文件也可以被删除;常用于删除程序运行后的临时文件的删除;

判断方法

  1. boolean exists() 判断文件或文件夹是否存在。
  2. boolean isFile() 是否是一个文件,如果不存在,则始终为false。
  3. boolean isDirectory() 是否是一个目录,如果不存在,则始终为false。
  4. boolean isHidden() 是否是一个隐藏的文件或是否是隐藏的目录。
  5. boolean isAbsolute() 是否为绝对路径名。

获取方法

文件相关:

  1. String getName() 获取文件或文件夹的名称,不包含上级路径。

  2. String getPath() 返回绝对路径,可以是相对路径,但是目录要指定

  3. String getAbsolutePath() 获取文件的绝对路径,与文件是否存在没关系

  4. File getAbsoluteFile()

  5. long length() 获取文件的大小(字节数),如果文件不存在则返回0L,如果是文件夹也返回0L。

  6. String getParent() 返回此抽象路径名父目录的路径名字符串;如果此路径名没有指定父目录,则返回null。

  7. File getParentFile()

  8. long lastModified() 获取最后一次被修改的时间。

文件夹相关:

  1. static File[] listRoots():列出所有的根目录(Window中就是所有系统的盘符)
  2. String[] list():返回目录下的文件或者目录名,包含隐藏文件。对于文件这样操作会返回null。返回一个String数组;
  3. String[] list(FilenameFilter filter):返回指定当前目录中符合过滤条件的子文件或子目录。对于文件这样操作会返回null。
  4. File[] listFiles() 返回目录下的文件或者目录对象(File类实例),包含隐藏文件。对于文件这样操作会返回null。
File[] files = file.listFiles(); // 把当前文件夹下面的所有子文件与子文件夹都使用了一个File对象描述,然后把这些File对象存储到一个FIle数组中返回
for(File fileItem : files){
	System.out.println("文件名:"+ fileItem.getName());
}
  1. File[] listFiles(FilenameFilter filter):返回指定当前目录中符合过滤条件的子文件或子目录。对于文件这样操作会返回null。

遍历

  • public String[] list() 获取当前目录下的所有一级文件名、文件夹
  • public File[] listFiles() 获取当前目录下的所有一级文件
//递归遍历目录
import java.io.File;
import java.util.ArrayList;
import java.util.List;

public class Main {
    private static List<File> fileList = new ArrayList<>();
    private static List<File> dirList = new ArrayList<>();

    public static void main(String[] args) {
        File file = new File("C:/users/kyle/desktop");
        getAllFile(file);

        for(File e:fileList) {
            System.out.println(e.toPath());
        }
        for(File e:dirList) {
            System.out.println(e.toPath());
        }
    }

    /**
     * 方法:获取某个目录下的所有文件、文件夹
     * 输入:目录
     * 输出:fileList、dirList
     * 算法:
     *   1.exists()
     *   2.isFile() isDirectory()
     */
    public static void getAllFile(File dir) {
        if(dir.exists() && dir.isDirectory()) {
            File[] files = dir.listFiles(); //获取当级目录下的所有文件、文件夹
            if(files!=null && files.length>0) { //注意files的取值可能为null、可能为大小为0的数组
                for(File file:files) {
                    if(file.isFile()) { //是文件
                        fileList.add(file);
                    } else if(file.isDirectory()) { //是文件夹
                        dirList.add(file);
                        getAllFile(file);
                    }
                }
            }
        }
    }
}

文件过滤器

功能: 遍历目录时,可以根据需要,只获取满足条件的相关文件。
实现文件过滤器的相关接口

  1. FilenameFilter:实现此接口的类实例,可用于过滤文件名。
    方法摘要:boolean accept(File dir, String name); 测试指定文件是否应该包含在某一个文件列表中。
  2. FileFilter:用于抽象路径的过滤器。
    方法摘要boolean accept(File pathname); 测试指定的抽象路径名是否应该包含在路径列表中。

使用文件过滤器的步骤:

  1. 创建自定义的文件过滤器类,实现相关接口,重写抽象方法
  2. File对象调用listFiles方法,传入匿名的过滤器对象,实现过滤目的。
  3. 其中listFiles方法的作用有两个:调用accept方法和传入该方法所需的参数

简单示例:

import java.io.File;
import java.io.FileFilter;

class MyFilter implements FileFilter {
	@Override
	public boolean accept(File pathname) {
		//对路径进行判断,如果是java文件,返回true,不是java文件,返回false
		return pathname.getName().endsWith(".java");
	}
}

public class Main {
	public static void main(String[] args) {
		File file = new File("c:\\users\\KYLE\\desktop\\");
		File[] fileArr = file.listFiles(new MyFilter());
		for(File f : fileArr){
			System.out.println(f);
		}
	}
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【Java文件流】管理文件和文件夹:File类 的相关文章

随机推荐