版权声明:来自等待or进取的博客 https://blog.csdn.net/qq_39466683/article/details/82623421
File
File
类的实例是不可变的;也就是说,一旦创建,File
对象表示的抽象路径名将永不改变。- File的每一个实例可以用于表示文件系统中的一个文件或目录。
- java.io.File
- 作用:
·访问文件或目录的属性(名字、大小、修改时间)
·操作文件或目录(创建、删除)
·访问一个目录的子项 - 但是不能读写文件数据。
- Windows:D:/JavaDev/workspace/ND09/demo.txt
Linux:home/……/workspace/ND09/demo.txt
路径尽量选取相对路径,不同系统的路径方式不同,相对路径可以做到跨平台。 - 构造方法:
~File(URI uri) :
通过将给定的 file: URI 转换为一个抽象路径名来创建一个新的 File 实例。
~File(String pathname) :
通过将给定路径名字符串转换为抽象路径名来创建一个新 File 实例。
~File(String parent, String child):
根据 parent 路径名字符串和 child 路径名字符串创建一个新 File 实例。
~File(File parent, String child) :
根据 parent 抽象路径名和 child 路径名字符串创建一个新 File 实例。 - 方法:
~canRead():
测试应用程序是否可以读取此抽象路径名表示的文件。
~canWrite():File file = new File("./demo.txt"); boolean cr = file.canRead(); System.out.println("canRead:"+cr);
测试应用程序是否可以修改此抽象路径名表示的文件。File file = new File("./demo.txt"); boolean cw = file.canWrite(); System.out.println("canWrite:"+cw);
~createNewFile():
当且仅当不存在具有此抽象路径名指定名称的文件时,不可分地创建一个新的空文件。File file =new File("./test.txt"); if(!file.exists()) { file.createNewFile(); System.out.println("创建完毕"); }else { System.out.println("文件存在"); }
~delete():
删除此抽象路径名表示的文件或目录。/* * 将当前目录中的text.txt */ File file = new File("./test.txt"); if(file.exists()) { file.delete(); System.out.println("删除完毕"); }else { System.out.println("不存在"); }
//删除目录 File file = new File("./demo"); if(file.exists()) { file.delete();//demo是空目录 可以用delete() System.out.println("删除完毕"); }else { System.out.println("目录不存在"); } File file1 = new File("./a/b/c/d/e/f");//删除f目录 if(file1.exists()) { file1.delete();//demo是空目录 可以用delete() System.out.println("删除完毕"); }else { System.out.println("目录不存在"); }
/** * 删除目录 * 由于delete()方法删除目录时要求必须是一个空目录 * 那么在实际情况中,我们需要先将一个删除的目录清空才可以将其删除 */ public static void main(String[] args) { File file = new File("./a"); delete(file); } /** * * 删除给定的File所表示的文件或目录 * * 递归调用: * 方法内部调用自己方法的现象称为低估调用 * 避免使用递归,随着递归的次数增加,内存开销较大 * * 使用递归: * 1.递归现象必须在一个分支中控制 * 2.层级尽量少 * @param file */ public static void delete(File file) { if(file.isDirectory()) { /* * 先将目录清空 * 1.获取该目录中的子项 * 2.遍历将他们一个一个删除 * */ File[] subs = file.listFiles(); for (int i = 0; i < subs.length; i++) { File sub = subs[i]; delete(sub); } } file.delete(); }
~exists():
测试文件或目录是否存在。File file = new File("./demo.txt"); boolean ex = file.exists(); System.out.println("exists:"+ex);
~getName():
返回由此抽象路径名表示的文件或目录的名称。File file = new File("./demo.txt"); String name = file.getName(); System.out.println("name:"+name);
~isDirectory():
测试此抽象路径名表示的文件是否是一个目录。
~isFile() :
测试此抽象路径名表示的文件是否是一个标准文件。
~isHidden():
测试此抽象路径名指定的文件是否是一个隐藏文件。
~length():
返回由此抽象路径名表示的文件的长度。
~listFiles():
返回一个抽象路径名数组,这些路径名表示此抽象路径名表示的目录中的文件。/*获取当前目录(项目目录)中的所有子项*/ File dir = new File("."); /* boolean isFile() * boolean isDirectory() */ if(dir.isDirectory()) { // 获取所有子项 File[] subs = dir.listFiles(); for (int i = 0; i < subs.length; i++) { System.out.println(subs[i].getName()); } }
~重载listFile():
/*File提供了一个重载listFiles方法,可以指定一个文件过滤器,然后将一个目录中满足过滤器要求的子项返回。*/ public class ListFilesDemo2_09 { public static void main(String[] args) { File file = new File("."); // File[] subs = file.listFiles(new MyFilter()); // lambda之后讲 // 匿名内部类 File[] subs = file.listFiles(new FileFilter() { public boolean accept(File file) { return file.getName().endsWith(".txt"); } }); System.out.println("length:"+subs.length); for (int i = 0; i < subs.length; i++) { System.out.println("已过滤:"+subs[i].getName()); } } } class MyFilter implements FileFilter{ public boolean accept(File file) { String name = file.getName(); System.out.println("正在过滤:"+name); return name.endsWith(".txt"); // return file.isFile(); 返回文件 } }
~mkdir():
创建此抽象路径名指定的目录。
~mkdirs():
创建此抽象路径名指定的目录,包括所有必需但不存在的父目录。File dir = new File("./demo"); if(!dir.exists()) { dir.mkdirs(); System.out.println("目录创建成功"); }else { System.out.println("目录存在"); }