目录
不同风格的分隔符
绝对与相对路径
File 类常用方法
常用构造器
创建方法
判断方法
获取方法
命名方法
删除方法
我们可以知道, 存储在程序中的数据是暂时的, 在程序终止的时候, 存储在程序中的数据就会丢失. 我们通常为了永久地保存在程序中创建地数据, 需要将它们存储到磁盘上或者其他永久存储设备的文件中, 这些文件之后可以被其他的程序传输和读取.
而 java.io 包下的 File 实用类库就可以被运用操作这些文件, File 封装了在用户机器上处理文件系统所需要的所有功能.
官方给的定义是: 代表的是文件或者目录路径名的抽象.
This class presents an abstract, system-independent view of hierarchical pathnames.
可以说, 这个类提供了一个抽象的, 与系统无关的层次路径名视图.
不同风格的分隔符
在 Windows 系统中, 用 \ 间隔目录, 用; 间隔不同的路径.
在 Linux 或 unix 中, 用 / 间隔目录, 用: 间隔不同的路径.
java 为了屏蔽不同操作系统的差异性, 提供了 File.separator 表示间隔符, 提供了 File.pathSeparator 间隔不同路径. 当然这两个是 String 类型, 另外两个为 Char 类型, 作用相同.
绝对与相对路径
绝对路径 (absolute): 以盘符或者 / 开头的路径.
相对路径 (relative): 相较于某个路径下才指明的路径.
在 IDEA 的 main() 方法中测试, 相对路径是当前的 Project 下.
- File file = new File("newFile");
- System.out.println(file.getAbsolutePath());
- //E:\java_learning\project01\newFile
File 类常用方法
常用构造器
- File(String pathname) // 传入一个路径名 (文件 or 目录)
- File(String parent, String child) // 在目录 parent 下创建一个子路径对象
- File(File parent, String child) // 在目录 parent 下创建一个子路径对象, 区别是 parent 本身就是 File 对象
下面是创建 File 对象的一个例子, 需要注意的是, 创建对象并不意味着创建了一个真实的文件, 而是一种抽象, 可以通过这个 File 对象进行相应的操作.
- // 以绝对路径名作为参数, 创建一个 File 对象.
- File file = new File("D:\\newFile.txt");
我们之前提到, Windows 系统中目录层级之间的分隔符是反斜杠 \,Java 中反斜杠是一个转义字符, 所以要表示 \, 需要写成 \\.
创建方法
下面的三个方法用以创建文件或者创建目录, 都有返回的 boolean 值.
创建文件
public boolean createNewFile()
用以创建文件, 创建成功返回 true. 但是如果该文件已经存在, 则返回 false.
创建目录
public boolean mkdir()
用以创建文件目录, 创建成功返回 true. 但是需要注意的是: 同样的, 如果目录已经存在, 则返回 false, 如果该文件目录的上层目录不存在, 也不会创建.
创建多级目录
public boolean mkdirs()
同样是创建文件目录, 如果已经存在, 则返回 false. 但是和上面不同的是, 如果上层目录不存在, 它会一并创建.
需要注意: 如果创建 File 对象时, 传入的路径名没有指定盘符, 则为相对路径名, 在项目路径下.
判断方法
下面的方法都是以 public boolean 修饰的方法, 用以判断.
获取方法
关于 getPath 和 getAbsolutePath 产生的疑惑? 为啥这两个产生的结果相同呢?
于是我进行了新的测试:
- File file = new File("relativeFile");
- file.getAbsolutePath(); //E:\java_learning\project01\relativeFile
- file.getPath(); //relativeFile
这次我以相对路径名作为参数传入, 结果显而意见. getAbsolutePath 返回的是默认带着项目路径的绝对路径名, 而 getPath 只是将传入的路径名原原本本地返回.
关于产生的文件列表, 其实还有 list() 方法, 只不过它的返回值类型是 String[].list() 和 listFiles() 都有传入参数是 FilenameFilter 接口类型的重载方法.
- public interface FilenameFilter {
- boolean accept(File dir, String name);
- }
我们可以通过匿名内部类, 对产生的列表进行操作:
- // 打印该目录下的 java 文件
- File path = new File("module01\\src\\com\\my\\FileTest");
- File[] list;
- // 通过匿名内部类返回 FilenameFilter 的引用
- list = path.listFiles(new FilenameFilter() {
- @Override
- public boolean accept(File dir, String name) {
- // 选择接收. java 结尾的文件
- return name.endsWith(".java");
- }
- });
- for(File l:list)
- System.out.println(l.getName());
命名方法
public boolean renameTo(File dest)
把文件重命名为指定地文件路径, 如果成功, 返回 true.
删除方法
public boolean delete()
删除文件或者目录.
一旦删除成功, 无法在回收站复原, 是不可逆的.
如果待删除的目录里面包含着文件或者子目录, 则其不能被删除, 我们可以通过下面的方法递归删除包含内容的目录.
删除完整的目录.
- /**
- * 静态方法, 删除完整的目录
- * @param file 传入 File 对象
- */
- public static void deleteDirectory(File file){
- // 判断 file 对象是文件还是目录
- if(file.isDirectory()){
- // 如果是目录, 获取子文件和子目录列表
- File[] fs = file.listFiles();
- // 遍历数组
- for(File f :fs){
- // 递归删除
- deleteDirectory(f);
- }
- }
- // 最后的无论是啥, 都需要删除
- file.delete();
- }
来源: https://www.cnblogs.com/summerday152/p/12249209.html