Java File的常规API方法
一、 File类概述
在 Java 中,File 类是 java.io 包中唯一代表磁盘文件本身的对象,也就是说,如果希望在程序中操作文件和目录,则都可以通过 File 类来完成。File 类定义了一些方法来操作文件,如新建、删除、重命名文件和目录等。
File 类不能访问文件内容本身,如果需要访问文件内容本身,则需要使用输入/输出流。
File 类提供了如下三种形式构造方法。
- File(String path):如果 path 是实际存在的路径,则该 File 对象表示的是目录;如果 path 是文件名,则该 File 对象表示的是文件。
- File(String path, String name):path 是路径名,name 是文件名。
- File(File dir, String name):dir 是路径对象,name 是文件名。
使用任意一个构造方法都可以创建一个 File 对象,然后调用其提供的方法对文件进行操作
二、File类初体验
// 想要一个File对象来表示文件夹和hello.txt文件
File hello = new File("C:\\Users\\MissLiuAndMrWang\\Desktop\\JavaIO\\src\\main\\resources","hello.txt");
// 判断文件是否存在
System.out.println("判断hello.txt文件是否存在: "+hello.exists());
// 判断是否为文件夹 或者 文件
System.out.println("判断hello.txt文件是否文件: "+hello.isFile());
System.out.println("判断hello.txt文件是否文件夹: "+hello.isDirectory());
// 获取文件的内容长度
System.out.println("获取hello.txt的文件长度"+hello.length());
// 获取文件最后的修改时间
System.out.println("获取hello.txt的最后修改时间"+new Date(hello.lastModified()));
三、File字段
// 与系统有关的路径分隔符 返回值都是一个分号
System.out.println("与系统有关的路径分隔符"+File.pathSeparatorChar); // Char
System.out.println("与系统有关的路径分隔符"+File.pathSeparator); // String
// 名称分隔符
// abc/hello/a.txt
System.out.println("与系统有关的名称分隔符:"+File.separator);
System.out.println("与系统有关的名称分隔符:"+File.separatorChar);
四、路径写法
public void Test3(){
// 我们写路径的时候可以直接写\ 为什么定义字段呢
// 定义字段的作用
File file1 = new File("d\\io");
File file2 = new File("d:"+File.separator+"io");
// 不同的系统中分隔符不一样,windows和DOS是\;但是Unix和linux是/;
// 其实现在在windows可以识别/
// 为了兼容性更好,所以使用 File.separator
// 推荐使用 / 或者 File.separator
}
五、绝对路径和相对路径
绝对路径:是一个固定的路径,从盘符开始;
- 对于UNIX平台,绝对路径名的前缀是"/",相对路径名没有前缀。
- 对于windows平台,绝对路径名的前缀电驱动器号和一个":“组成,例"c : \ …”,相对路径没有盘符前缀。
相对路径:是相对于某个位置开始;
相对路径是指相对于某位置的路径,是指相对于当前目录。
- 在执行Java程序时,相对路径为执行java命令时当前所在的目录。
六、构造器
public void Test5(){
// File(String pathname)
File file1 = new File("C:/");
System.out.println("判断对应的文件夹是否存在: "+file1.exists()); // true
// 结合file的路径,寻找file2,file1作为父目录 也就是找的 C:/hello.txt
File file2 = new File(file1,"hello.txt");
System.out.println(file2.exists());
// 写入路径和文件名 和第二个一样
File file3 = new File("C:/","hello.txt");
}
七、创建方法
public void Test5(){
// File(String pathname)
File file1 = new File("C:/");
System.out.println("判断对应的文件夹是否存在: "+file1.exists()); // true
// 结合file的路径,寻找file2,file1作为父目录 也就是找的 C:/hello.txt
File file2 = new File(file1,"hello.txt");
System.out.println(file2.exists());
// 写入路径和文件名 和第二个一样
File file3 = new File("C:/","hello.txt");
}
@Test
public void Test6() throws IOException {
// File file1 = new File("C:\\Users\\MissLiuAndMrWang\\Desktop\\JavaIO\\src\\main\\resources");
// boolean createNewFile() 当且仅当不存在此抽象路径名指定的文件时,不可分的创建一个,存在则不会创建
// file1.createNewFile(); // 抛出异常
// static File createTempFile(String prefix, String suffix)在默认临时文件目录中创建一个空文件,使用给定的前缀和后缀生成其名称。
// File tempFile = File.createTempFile("Java", ".yyds");
// File类重写了toString方法,返回文件的路径
// System.out.println(tempFile);
// createTempFile(String prefix, String suffix, File directory) 在指定的目录中创建一个新的空文件,使用给定的前缀和后缀字符串生成其名称。
// File tempFile2 = File.createTempFile("Java", ".yyds", file1);
// System.out.println(tempFile2);
// boolean mkdir() 创建抽象路径名指定的额目录
// File file2 = new File("C:\\Users\\MissLiuAndMrWang\\Desktop\\JavaIO\\src\\main\\resources\\TestMKDIR");
// boolean isMK = file2.mkdir();
// if(isMK){
// System.out.println("文件夹创建成功");
// }else {
// System.out.println("文件创建失败");
// }
// boolean mkdirs() 创建抽象路径名指定的目录 加s可以创建多级目录
File file3 = new File("C:\\Users\\MissLiuAndMrWang\\Desktop\\JavaIO\\src\\main\\resources\\TestMKDIR\\duo1\\duo2\\duo3");
boolean isMKs = file3.mkdirs();
if(isMKs){
System.out.println("文件夹创建成功");
}else {
System.out.println("文件创建失败");
}
}
八、renameTo方法
boolean renameTo(File dest) 重新命名此抽象路径名表示的文件
- 情况一:如果源文件对象和参数文件对象位于同一级目录,就是改名字操作
- 情况二:如果不在一个目录,那么就是文件移动操作,然后改名字
public void Test8(){
// boolean renameTo(File dest) 重新命名此抽象路径名表示的文件
// 情况一:如果源文件对象和参数文件对象位于同一级目录,就是改名字操作
File filex = new File("C:\\Users\\MissLiuAndMrWang\\Desktop\\JavaIO\\src\\main\\resources\\hello.txt");
File filey = new File("C:\\Users\\MissLiuAndMrWang\\Desktop\\JavaIO\\src\\main\\resources\\helloworld.txt");
filex.renameTo(filey);
// 情况二:如果不在一个目录,那么就是文件移动操作,然后改名字
File filex1 = new File("C:\\Users\\MissLiuAndMrWang\\Desktop\\JavaIO\\src\\main\\resources\\helloworld.txt");
File filey1 = new File("C:\\Users\\MissLiuAndMrWang\\Desktop\\JavaIO\\src\\main\\resources\\TestMKDIR\\hell1oworld.txt");
filex1.renameTo(filey1);
}
九、删除方法
- boolean delete() 删除文件 回收站没有 java中的删除不走回收站
- 如果删除的是目录 则必须是空目录 否则无法删除
- void deleteOnExit() 虚拟机终止的时候删除文件
public void Test9(){
File file1 = new File("C:\\Users\\MissLiuAndMrWang\\Desktop\\JavaIO\\src\\main\\resources\\TestMKDIR\\hell1oworld.txt");
// boolean delete() 删除文件 回收站没有 java中的删除不走回收站
// 如果删除的是目录 则必须是空目录 否则无法删除
boolean isDel = file1.delete();
if (isDel){
System.out.println("删除成功");
}else {
System.out.println("删除失败");
}
// void deleteOnExit() 虚拟机终止的时候删除文件
}
十、判断方法
public void Test10(){
// 存在该文件
File file1 = new File("C:\\Users\\MissLiuAndMrWang\\Desktop\\JavaIO\\src\\main\\resources\\1.txt");
// 存在 只读
File file2 = new File("C:\\Users\\MissLiuAndMrWang\\Desktop\\JavaIO\\src\\main\\resources\\2.txt");
// 存在 隐藏
File file3 = new File("C:\\Users\\MissLiuAndMrWang\\Desktop\\JavaIO\\src\\main\\resources\\3.txt");
// 不存在该文件
File file4 = new File("C:\\Users\\MissLiuAndMrWang\\Desktop\\JavaIO\\src\\main\\resources\\4.txt");
// bool canExecute() 测试是否是可执行文件.exe
file1.canExecute(); // true
file2.canExecute();// true
file3.canExecute();// true
file4.canExecute();// false
// canRead() 测试文件是否可读 和 是否可执行一样
// canWrite() 是否可写
file1.isAbsolute();// 是否是绝对路径
file2.isHidden();// 是否是隐藏文件
}
十一、获取方法
这里只写了一部分 还有很多,用到再补充吧
public void Test11(){
// 相对路径写法
File file1 = new File("src\\main\\resources\\","1.txt");
System.out.println(file1.exists());
// file getAbsoluteFile() 返回抽象路径的绝对路径名的形式
File file2 = file1.getAbsoluteFile();
System.out.println(file2);
// equals() 比较的是两个对象的抽象路径名;
System.out.println(file1.equals(file2)); // false
// getAbsolutePath() 获取绝对路径的路径名称
System.out.println("file1的绝对路径:" + file1.getAbsolutePath());
// long getFreeSpace() 返回抽象路径名指定的分区中未分配的字节数
long freeSpace = file1.getFreeSpace();
System.out.println(freeSpace);
//String getName() 返回此抽象路径名表示的文件名,如果是目录则会最后一节目录
System.out.println(file1.getName());
// String getParent() 获取文件的父路径
System.out.println(file1.getParent()); // config
// File geParentFile() 获取父路径对象
// String getPath() 将抽象路径名转换为一个路径名字字符串
// long getTotalSpace() 获取分区的总大小
}