A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© heifachangcun 中级黑马   /  2018-11-26 14:55  /  603 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

File类
作用: java.io.File类: "文件"和"目录"的路径名的抽象表现形式, 主要用于文件和目录的创建, 查找和删除等操作
IO: Input输入 Output输出

关键字:        file: 文件
   directory: 目录
   path: 路径
File类的静态成员变量
java.io.File类: 文件和目录的路径名的抽象表现形式, 主要用于文件和目录的创建, 查找和删除等操作
// 静态成员变量
  static String pathSeparator: 路径分隔符的字符串形式
  static char pathSeparatorChar: 路径分隔符的char形式
Windows系统是 分号;
            Linux系统是 冒号:
  static String separator: 文件名称分隔符的字符串形式
  static char separatorChar: 文件名称分隔符的char形式
Window系统是 反斜杠\
            Linux系统是 正斜杠/
绝对路径和相对路径
绝对路径:
以盘符开始的路径       如: "D:\\a\\hi.txt"
相对路径:
不以盘符开始的简化路径. IDEA项目, 相对于项目的根目录
如: "a\\1.mp3", "123.txt"
注意事项:
1. 路径不区分大小写 (在Windows系统中不区分大小写, Linux, Mac区分)
2. 路径一般写成字符串, 而字符串中一个\是转义, 所以要写两个\\
File类: 构造方法
// 构造方法(创建了File对象, 并将其指向该路径. 不会真正在磁盘上创建这个文件)
File File(String pathname): 根据 路径字符串 封装一个File对象
File File(String parent, String child): 根据 父路径字符串 和 子路径字符串 封装File对象
File File(File parent, String child): 根据 父路径的File对象 和 子路径 封装File对象
注意:        不存在的路径也可以创建File对象
    创建File对象后, 并不会在磁盘上创建文件或目录!
    路径是一个英文句点时,表示路径是项目根路径;
    路径是两个英文句点时,表示是项目根路径的上一个路径
C:/Users/Administrator/AppData/Local/YNote/data/qq0160B4AE0B97BA596F0CCCA205A4CECF/28f9129ff3be4b96897b280b85ef4af8/%E6%8D%95%E8%8E%B7.png
File类: 获取方法
java.io.File类
  // 常用获取方法
         String getAbsolutePath(): 返回此File的绝对路径名字符串
         String getPath(): 获取File对象的封装路径 (创建对象时传入的路径)
          String getName(): 获取File对象的文件名或目录名  d:\a\b\c\aaa.txt
  long length(): 获取File表示的"文件"大小的字节byte数 (不能获取目录的大小)
附注:
   获取方法
getAbsolutePath()方法,不论输入的路径是绝对路径还是相对路径,返回的都是绝对路径
getPath()方法,输入的路径是啥路径,返回的就是什么路径,按原样返回
getName()方法,不论输入的是相对还是绝对路径,返回的都是截取路径的最后一段
length()方法,输入目录,没有长度值,会返回4096或0;输入文件名,返回文件的字节数
File类: 判断方法
java.io.File类
                 // 常用判断方法
boolean exists(): 判断File对象代表的文件或目录是否实际存在
boolean isDirectory(): 判断File表示的是否为目录
boolean isFile(): 判断File表示的是否为文件
附注
判断方法
exists()方法,判断输入的路径中末尾的文件或是目录是否真实存在
isDirectory()方法,判断输入的路径末尾一段是否是目录
isFile()方法,判断输入的路径末尾一段是否是文件
File类: 创建删除方法
java.io.File类
// 常用创建删除方法
boolean createNewFile(): 当文件不存在时, 创建一个新的空文件
false: 路径已经存在(无论文件还是目录)
                    抛IO异常: 写的路径不符合逻辑 (Y:\\a.txt\dsfsd)
boolean delete(): 删除由此File表示的文件或目录.
            删除目录时: 必须是空目录
boolean mkdir(): 创建File表示的目录  "d:\\a\\b\\c\\我的目录"
false: 1. 路径已经存在(无论文件还是目录)  2. 写的路径不符合逻辑 (Y:\\a.txt\dsfsd)
boolean mkdirs(): 创建File表示的多级目录  "d:\\a\\b\\c\\我的目录"
false: 1. 路径已经存在(无论文件还是目录)  2. 写的路径不符合逻辑 (Y:\\a.txt\ds)
附注
创建删除
createNewFile()方法 只能创建文件,而且是单级文件,不看文件名如何,只看类型
                                创建文件的方法需要处理异常,调用创建文件方法在创建时,如果路径不存在会抛出IO异常
mkdir()方法,只能创建单级目录,不看名字,只看类型
mkdirs()方法,可创建单级或多级目录
delete()方法,可删除文件或目录,删除目录时需要层层删除,从里到外的删
File类: 遍历目录方法
     java.io.File类
  // 常用获取目录中内容的方法
String[] list(): 获取当前File目录下的所有子文件或目录的名字数组
File[] listFiles(): 获取当前File目录中的所有子文件或目录的File对象数组
注意:
只能用表示目录的File对象调用
用文件的File对象, 或者路径不存在, 调用会报错
附注
遍历目录
list()方法,查看目录里的子目录或是文件名称
listFiles()方法,可查看目录里的子目录和文件的完整路径和名称
两种方法都需要使用for循环遍历,便于查看结果,否则打印的是地址值
遍历可以获取隐藏文件或目录
C:/Users/Administrator/AppData/Local/YNote/data/qq0160B4AE0B97BA596F0CCCA205A4CECF/b3cefc39dfc344c4b59c3884d3039a6b/%E6%96%87%E4%BB%B6%E7%9B%AE%E5%BD%95%E9%81%8D%E5%8E%86.png
递归
递归思想:
遇到一个问题时, 将该问题拆解成可以解决的小问题, 如果解决不了, 继续拆解为更小的问题. 如果小问题解决了, 大问题也就能够解决(递归实现思路  -->将要解决的问题, 封装为方法)
Java中实现递归的方式:
方法内部调用方法自己 (所以必须定义方法)
递归的分类:
直接递归: 方法自己调用方法
间接递归: A方法调用B方法, B方法调用C方法, C方法调用A方法

递归时的注意事项:
  1. 递归要有限定条件(出口), 保证递归能够停止(就是在某种情况下方法不再调用自己), 否则会栈内存溢出
  2. 递归次数不能太多, 否则会栈内存溢出
  3. 构造方法不能递归
递归的使用前提:
调用方法时, 方法的主体不变, 但每次传递的参数值不同, 可以使用递归
FileFilter文件过滤器的原理和使用
java.io.File类:  Filter过滤器
File[] listFiles(FileFilter filter): 返回文件过滤器过滤后的File对象数组
File[] listFiles(FilenameFilter filter): 返回文件过滤器过滤后的File对象数组
java.io.FileFilter接口: 用于File对象的过滤器
boolean accept(File pathName): true则会将参数的File对象加入返回的File[], false则不加入
java.io.FilenameFilter接口: 将File对象拆分为父路径和子路径来判断的过滤器
boolean accept(File dir, String name): true则会将参数的File对象加入返回的File[], false则不加入
dir: 被找到的文件所在的目录 (父路径)
name: 文件的名称     (子路径)
例子:
需求:
使用File[] listFiles(FilenameFilter filter)方法和Lambda表达式, 将当前模块下的.java文件过滤打印出来
package demo04;

import java.io.File;
import java.io.FileFilter;
import java.io.FilenameFilter;

/*需求:
使用File[] listFiles(FilenameFilter filter)方法和Lambda表达式, 将当前模块下的.java文件过滤打印出来*/
public class Test03 {
    public static void main(String[] args) {
        File dir = new File("com.itheima.day08");
        getAllFile(dir);
    }
    public static void getAllFile(File dir){
       /* File[] files = dir.listFiles(new FileFilter() {
            @Override
            public boolean accept(File pathname) {
                return pathname.isDirectory()||pathname.getName().toLowerCase().endsWith(".java");
            }
        });*/
//       Lambda表达式标准
       /* File[] files = dir.listFiles((File pathname) ->{
                return pathname.isDirectory()||pathname.getName().toLowerCase().endsWith(".java");
            }
        );*/
//       Lambda表达式优化
//        File[] files = dir.listFiles(pathname->pathname.isDirectory()||pathname.getName().toLowerCase().endsWith(".java"));

      /* File[] files = dir.listFiles(new FilenameFilter() {
           @Override
           public boolean accept(File dir, String name) {
               return new File(dir,name).isDirectory()||name.toLowerCase().endsWith(".java");
           }
       });*/

      //Lambda标准
        /*File[] files = dir.listFiles((File d, String name)-> {
                return new File(d,name).isDirectory()||name.toLowerCase().endsWith(".java");
            }
        );*/
      //Lambda表达式优化
        File[] files = dir.listFiles((d,name)->new File(d,name).isDirectory()||name.toLowerCase().endsWith(".java"));
        for (File file : files) {
            if(file.isDirectory()){
                getAllFile(file);
            }else{
                System.out.println(file);
            }
        }
    }
}


0 个回复

您需要登录后才可以回帖 登录 | 加入黑马