马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
x
File类
java.io.File 类是文件和目录路径名的抽象表示,主要用于文件和目录的创建、查找和删除等操作。File类将文件,文件夹和路径封装成了对象,提供大量的方法来操作这些对象。
静态常量
- // 静态常量
- static String pathSeparator // 与系统有关的路径分隔符
- // Window操作系统,分隔符是分号;
- // Linux操作系统,分隔符是冒号:
- static String separator // 与系统有关的名称分隔符
- // Window操作系统,名称分割符号为 \
- // Linux操作系统,名称分隔符号为 /
复制代码 绝对路径和相对路径
- 绝对路径:从盘符(Windows)或"/"(Linux)开始的路径,这是一个完整的路径,绝对路径具有唯一性
- 相对路径:相对于某个目录的路径,这是一个便捷的路径,开发中经常使用,java中写的相对路径, 一般都是相对于当前项目
- // Windows绝对路径 Windows
- String path1 = "E:\\study\\java\\5_projects\\FileClass\\test";
- String path2 = "/opt/html/dist"
- // 相对路径
- String path3 = "FileClass\\test";
复制代码 构造方法
- public File(String pathname)
- // 通过将给定的路径名字符串转换为抽象路径名来创建新的 File实例
- public File(String parent, String child)
- // 从父路径名字符串和子路径名字符串创建新的 File实例
- public File(File parent, String child)
- // 从父抽象路径名和子路径名字符串创建新的 File实例
复制代码- // 根据给定的路径 创建File对象
- File file1 = new File("E:\\study\\java\\5_projects\\FileClass\\test");
- System.out.println(file1.toString() + "\t " + file1.getPath());
- // 传入字符串的父路径 和 字符串的子路径 创建File对象
- File file2 = new File("E:\\study\\java\\5_projects\\FileClass","test");
- System.out.println(file2);
- File file3 = new File("E:\\study\\java\\5_projects","\\FileClass\\test");
- System.out.println(file3);
- // 传入File类型的父路径 和 字符串类型的子路径
- File file4 = new File(file1, "1.txt");
- System.out.println(file4);
复制代码注意:
- 一个File对象代表硬盘中实际存在的一个文件或者目录。
- 无论该路径下是否存在文件或者目录,都不影响File对象的创建。
获取某些属性
- public File getAbsoluteFile() // 获取绝对路径(File类型)
- public String getAbsolutePath() // 获取绝对路径(字符串类型)
- public String getPath() // 返回字符串类型的路径
- public String getName() // 获取文件名
- public long length() // 获取文件字节数, 不存在返回0
- public File getParentFile() //返回File类型的父路径
- public long lastModified() // 返回最后修改时间
复制代码- // 获取绝对路径(字符串类型)
- System.out.println("绝对路径为: " + new File("FileClas\\src").getAbsoluteFile());
- System.out.println(file4.getAbsolutePath());
- // 获取绝对路径(File类型)
- System.out.println(file4.getAbsoluteFile());
- // 获取相对路径下的File对象
- File file6 = new File("FileClass" + File.separator + "test" + File.separator + "2.txt");
- System.out.println(file6.getAbsolutePath());
- // 获取字符串类型的路径 直接打引结果相同
- // 直接打印(toString)调用了getPath方法
- System.out.println(file1.getPath());
- // 获取文件名
- System.out.println(new File("FileClass/test/1.txt").getName());
- // 获取文件字节数, 不存在返回0
- long fileLength = new File("FileClass/test/1.txt").length();
- System.out.println(fileLength);
- // 获取父路径, 返回File对象
- File parentFile = new File("FileClass/test/1.txt").getParentFile();
- System.out.println(parentFile);
- System.out.println(parentFile.getParentFile());
- // 获取最后修改时间
- long lastModifyTime = new File("FileClass/test/1.txt").lastModified();
- System.out.println(lastModifyTime + "\t" + new Date(lastModifyTime));
复制代码 判断的方法
- public boolean exists()
- // 判断路径是否存在, 存在返回true
- public boolean isFile()
- // 判断是否为文件 文件返回true, 目录返回false, 路径不存在也返回false
- public boolean isDirectory()
- // 判断是否为目录, 目录返回true, 文件返回false, 路径不存在也返回false
复制代码- // 判断路径是否存在, 存在返回true
- System.out.println(new File("FileClass/test/NewDir1").exists());
- // 判断是否为文件 文件返回true, 目录返回false, 路径不存在也返回false
- System.out.println(file6.isFile());
- // 判断是否为目录, 目录返回true, 文件返回false, 路径不存在也返回false
- System.out.println(new File("FileClass/test/NewDir1").isDirectory());
- // 因此 判断某文件是文件/文件夹时 要先判断路径是否存在
- if (file1.exists()) {
- if(file1.isFile()) {
- System.out.println("文件");
- } else {
- System.out.println("目录");
- }
- } else {
- System.out.println("文件不存在");
- }
复制代码 创建和删除文件
- public boolean createNewFile() throws IOException
- // 创建文件, 成功返回true, 存在则不创建
- public boolean mkdir()
- // 创建单级目录, 成功返回true, 存在则不创建
- public boolean mkdirs()
- // 创建单/多级目录, 成功返回true, 存在则不创建
- public boolean delete()
- // 删除文件或空目录, 成功返回true
复制代码- // 创建文件, 成功返回true, 失败返回false
- System.out.println(file6.createNewFile());
- // 创建目录, 成功返回true, 失败返回false
- System.out.println(new File("FileClass/test/NewDir1").mkdir());
- System.out.println(new File("FileClass/test/NewDir2/NewDir3/NewDir4").mkdirs());
- // 删除文件 和 空目录
- System.out.println(file6.delete());
- System.out.println(new File("FileClass/test/NewDir1").delete());
- // 创建目录
- //StringBuilder sb = new StringBuilder("FileClass/test/");
- //for (int i = 0; i < 200; i++) {
- // sb.append(i);
- // sb.append("/");
- //}
- //System.out.println(new File(sb.toString()).mkdirs());
- //
- //删除目录
- //File fileForDel = new File(sb.toString());
- //do {
- // try {
- // if (Integer.parseInt(fileForDel.getName()) < 0) {
- // System.out.println("删除失败");
- // return;
- // }
- // } catch (NumberFormatException e) {
- // return;
- // }
- // fileForDel.delete();
- // fileForDel = fileForDel.getParentFile();
- //} while (true);
复制代码 遍历目录
- public String[] list()
- // 返回目录下所有文件 存放在字符串数组中
- public File[] listFiles()
- // 返回目录下所有文件 存放在File数组中
复制代码- String[] arr = new File("FileClass/test").list();
- for (String s : arr) {
- System.out.println(s);
- }
- File[] fileArr = new File("FileClass/test").listFiles();
- for (File file : fileArr) {
- System.out.println(file + "\t" + file.getName());
- }
复制代码 FileFilter接口
文件过滤器接口,此接口的实现类可以传递给方法listFiles(),实现文件的过滤功能
public boolean accept(File path):方法参数就是listFiles()方法获取到的文件或者目录的路径。如果方法返回true,表示需要此路径,否则此路径将被忽略。- File dir = new File(".\\ConcurrentProgramming\\src\\_5_ThreadPool");
- File[] files = dir.listFiles(new FileFilter() {
- @Override
- public boolean accept(File pathname) {
- //判断如果获取到的是目录,直接放行
- if(pathname.isDirectory())
- return true;
- //获取路径中的文件名,判断是否java结尾,是就返回true
- return pathname.getName().toLowerCase().endsWith("java");
- }
- });
- for(File file : files){
- System.out.println(file);
- }
复制代码 递归
指在当前方法内调用自己的这种现象。- public static void a(){
- a();
- }
复制代码 递归求和
计算1 ~ n的和
分析:num的累和 = num + (num-1)的累和,所以可以把累和的操作定义成一个方法,递归调用。
实现代码:- public static void main(String[] args) {
- //计算1~num的和,使用递归完成
- int num = 5;
- // 调用求和的方法
- int sum = getSum(num);
- // 输出结果
- System.out.println(sum);
- }
- public static int getSum(int num) {
- /*
- num为1时,方法返回1,
- 相当于是方法的出口,num总有是1的情况
- */
- if(num == 1){
- return 1;
- }
- /*
- num不为1时,方法返回 num +(num-1)的累和
- 递归调用getSum方法
- */
- return num + getSum(num-1);
- }
复制代码 递归求阶乘
阶乘:所有小于及等于该数的正整数的积。
分析:n的阶乘:n! = n * (n-1) ... 3 * 2 * 1- //计算n的阶乘,使用递归完成
- public static void main(String[] args) {
- int n = 3;
- // 调用求阶乘的方法
- int value = getValue(n);
- // 输出结果
- System.out.println("阶乘为:"+ value);
- }
- public static int getValue(int n) {
- // 1的阶乘为1
- if (n == 1) {
- return 1;
- }
- /*
- n不为1时,方法返回 n! = n*(n-1)!
- 递归调用getValue方法
- */
- return n * getValue(n - 1);
- }
复制代码 目录遍历
遍历目录下的所有文件和所有的子目录。
分析:目录遍历,无法判断多少级目录,所以在遍历需要进行判断,如果遍历到的还是目录,就要使用递归,遍历所有目录。- public static void main(String[] args){
- // 创建File对象
- show(new File("./").getAbsoluteFile());
- }
- public static void show(File dir) {
- // 获取子文件和目录
- File[] files = dir.listFiles();
- // 循环打印
- for (File file : files) {
- //判断是文件,直接输出
- if (file.isFile()) {
- System.out.println(file);
- } else {
- // 是目录,继续遍历,形成递归
- show(file);
- }
- }
- }
复制代码 免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |