File类的概述
File更应该叫做一个路径
文件路径或者文件夹路径
路径分为绝对路径和相对路径
绝对路径是一个固定的路径,从盘符开始
相对路径相对于某个位置,在eclipse下是指当前项目下,在dos下
查看API指的是当前路径
文件和目录路径名的抽象表示形式
构造方法
File(String pathname):根据一个路径得到File对象
File(String parent, String child):根据一个目录和一个子文件/目录得到File对象
File(File parent, String child):根据一个父File对象和一个子文件/目录得到File对象
案例演示
File类的构造方法
package com.heima.file; import java.io.File; public class Demo1_File { /** * @param args */ public static void main(String[] args) { File file1 = new File("D:\\JAVA\\01 JAVA基础\\day19\\day19\\code\\day19\\src\\com\\heima\\file\\Demo1_File.java"); System.out.println(file1.exists()); File file2 = new File("xxx.txt"); System.out.println(file2.exists()); File Parent = new File("D:\\JAVA\\01 JAVA基础\\day19\\day19\\code\\day19\\src\\com\\heima\\file"); String child = "Demo1_File.java"; File file3 = new File(Parent, child); System.out.println(file3.exists()); String parent = "D:\\JAVA\\01 JAVA基础\\day19\\day19\\code\\day19\\src\\com\\heima\\file"; String child2 = "Demo1_File.java"; File file4 = new File(Parent, child2); System.out.println(file4.exists()); } }
创建功能
public boolean createNewFile():创建文件,如果存在这样的文件,就不创建了
public boolean mkdir():创建文件夹,如果存在这样的文件夹,就不创建了
public boolean mkdirs():创建文件夹,如果父文件夹不存在,会帮你创建出来
案例演示
File类的创建功能
package com.heima.file; import java.io.File; import java.io.IOException; public class Demo2_File { /** public boolean createNewFile():创建文件,如果存在这样的文件,就不创建了 public boolean mkdir():创建文件夹,如果存在这样的文件夹,就不创建了 public boolean mkdirs():创建文件夹,如果父文件夹不存在,会帮你创建出来 * @throws IOException */ public static void main(String[] args) throws IOException { File file1 = new File("test"); System.out.println(file1.mkdir()); File file2 = new File("test\\a\\b\\c"); System.out.println(file2.mkdirs()); File file3 = new File("test\\a\\b\\c\\t1.txt"); System.out.println(file3.createNewFile()); // 需要ctrl+1,throws IOException } }
注意事项:
如果你创建文件或者文件夹忘了写盘符路径,那么,默认在项目路径下。
重命名和删除功能
public boolean renameTo(File dest):把文件重命名为指定的文件路径
public boolean delete():删除文件或者文件夹
重命名注意事项
如果路径名相同,就是改名。
如果路径名不同,就是改名并剪切。
删除注意事项:
Java中的删除不走回收站。
要删除一个文件夹,请注意该文件夹内不能包含文件或者文件夹
package com.heima.file; import java.io.File; import java.io.IOException; public class Demo3_File { /** 重命名和删除功能 public boolean renameTo(File dest):把文件重命名为指定的文件路径 public boolean delete():删除文件或者文件夹 * @throws IOException */ public static void main(String[] args) throws IOException { // demo1(); File file1 = new File("a/b/c/d"); File file2 = new File("a/b/c/d/test.txt"); if(!file1.exists()) { file1.mkdir(); } if (!file2.exists()) { file2.mkdirs(); } System.out.println(file1.exists()); System.out.println(file1.delete()); // Java中的删除不走回收站。 // 要删除一个文件夹,请注意该文件夹内不能包含文件或者文件夹 } public static void demo1() throws IOException { File file1 = new File("xxx.txt"); File file2 = new File("ooo.txt"); if (!file1.exists()) { file1.createNewFile(); } else { file1.delete(); file1.createNewFile(); } if (file2.exists() && file1.exists()) { file2.delete(); System.out.println(file1.renameTo(file2)); } } }
判断功能
public boolean isDirectory():判断是否是目录
public boolean isFile():判断是否是文件
public boolean exists():判断是否存在
public boolean canRead():判断是否可读
public boolean canWrite():判断是否可写
public boolean isHidden():判断是否隐藏
案例演示
File类的判断功能
package com.heima.file; import java.io.File; public class Demo4_File { /** public boolean isDirectory():判断是否是目录 public boolean isFile():判断是否是文件 public boolean exists():判断是否存在 public boolean canRead():判断是否可读 public boolean canWrite():判断是否可写 public boolean isHidden():判断是否隐藏 */ public static void main(String[] args) { File dir1 = new File("a"); File file1 = new File("ooo.txt"); System.out.println("查看文件file1和目录dir1是否是文件和目录"); System.out.println(dir1.isDirectory()); // true System.out.println(file1.isFile()); // true System.out.println("查看文件file1是否可读可写"); System.out.println(file1.canRead()); // true System.out.println(file1.canWrite()); // true System.out.println("设置文件file1和目录dir1是否可读可写"); file1.setReadable(false); //在windows系统中,认为所有文件都是可读的,所以设置无效 System.out.println(file1.canRead()); // true file1.setWritable(false); //在windows系统中,可以设置文件是否可写 System.out.println(file1.canWrite()); // false dir1.setWritable(false); System.out.println(dir1.canWrite()); // true System.out.println("查看目录是否可隐藏"); System.out.println(dir1.isHidden()); //false } }
获取功能
public String getAbsolutePath():获取绝对路径
public String getPath():获取路径
public String getName():获取名称
public long length():获取长度。字节数
public long lastModified():获取最后一次的修改时间,毫秒值
public String[] list():获取指定目录下的所有文件或者文件夹的名称数组
public File[] listFiles():获取指定目录下的所有文件或者文件夹的File数组
案例演示
File类的获取功能
package com.heima.file; import java.io.File; import java.io.IOException; import java.text.SimpleDateFormat; import java.util.Date; public class Demo5_File { /** public String getAbsolutePath():获取绝对路径 public String getPath():获取路径 public String getName():获取名称 public long length():获取长度。字节数 public long lastModified():获取最后一次的修改时间,毫秒值 public String[] list():获取指定目录下的所有文件或者文件夹的名称数组 public File[] listFiles():获取指定目录下的所有文件或者文件夹的File数组 * @throws IOException */ public static void main(String[] args) throws IOException { File file1 = new File("a/b/c/test"); file1.mkdirs(); for (int i = 0; i < 10; i++) { File file_i = new File("a/b/c/test/" + i); file_i.createNewFile(); } System.out.println("获取绝对路径:" + file1.getAbsolutePath()); // 获取绝对路径:D:\JAVA\courses\day19\a\b\c\test System.out.println("获取路径:" + file1.getPath()); // 获取路径:a\b\c\test System.out.println("获取名称:" + file1.getName()); // 获取名称:test System.out.println("获取长度,字节数:" + file1.length()); //获取长度,字节数:4096 System.out.println("获取最后一次的修改时间,毫秒值:" + file1.lastModified()); // 获取最后一次的修改时间,毫秒值:1592288698496 Date d = new Date(file1.lastModified()); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-mm-dd HH:MM:SS"); System.out.println(sdf.format(d)); // 2020-24-16 14:06:496 System.out.println("获取指定目录下的所有文件或者文件夹的名称数组:"); String[] arr_s = file1.list(); for (String s : arr_s) { System.out.println(s); // 0 1 2 3 .. 9 } System.out.println("获取指定目录下的所有文件或者文件夹的File数组:"); File[] listFiles = file1.listFiles(); for (File file : listFiles) { System.out.println(file); } /* a\b\c\test\0 a\b\c\test\1 a\b\c\test\2 a\b\c\test\3 a\b\c\test\4 a\b\c\test\5 a\b\c\test\6 a\b\c\test\7 a\b\c\test\8 a\b\c\test\9 */ } }
案例演示
需求:判断E盘目录下是否有后缀名为.jpg的文件,如果有,就输出该文件名称
package com.heima.file; import java.io.File; public class Demo6_File { /** 需求:判断E盘目录下是否有后缀名为.jpg的文件,如果有,就输出该文件名称 */ public static void main(String[] args) { // demo1(); File dir = new File("E:\\"); File[] subfiles = dir.listFiles(); // 获取E盘下所有的文件或文件夹对象 for (File file : subfiles) { if(file.isFile() && file.getName().endsWith(".jpg")) { System.out.println(file); } } } public static void demo1() { File dir = new File("E:\\"); String[] arr = dir.list(); // 获取E盘下的所有文件和文件夹 for (String string : arr) { if(string.endsWith(".jpg")) { System.out.println(string); } } } }
文件名称过滤器的概述
public String[] list(FilenameFilter filter)
public File[] listFiles(FileFilter filter)
文件名称过滤器的使用
需求:判断E盘目录下是否有后缀名为.jpg的文件,如果有,就输出该文件名称
package com.heima.file; import java.io.File; import java.io.FilenameFilter; public class Demo6_File { /** 需求:判断E盘目录下是否有后缀名为.jpg的文件,如果有,就输出该文件名称 */ public static void main(String[] args) { File dir = new File("E:\\"); String[] arr = dir.list(new FilenameFilter() { @Override public boolean accept(File dir, String name) { File file = new File(dir,name); return file.isFile() && file.getName().endsWith(".jpg"); } }); for (String string : arr) { System.out.println(string); } } }
源码分析
带文件名称过滤器的list()方法的源码
public String[] list(FilenameFilter filter) { String names[] = list(); // 获取文件名称数组 if ((names == null) || (filter == null)) { return names; // 判断null值情况 } List<String> v = new ArrayList<>(); // 生成ArrayList数组列表,用于存储符合文件过滤器条件的文件名名称 for (int i = 0 ; i < names.length ; i++) { if (filter.accept(this, names[i])) { // 调用文件过滤器的accept的方法 v.add(names[i]); } } return v.toArray(new String[v.size()]); // 将输出结果转换为数组 }
5的阶乘
原文:https://www.cnblogs.com/zoe233/p/13036452.html