Java I/O 系统中的 File 类详解

对于程序设计者来说,设计一个很好的I/O系统是一件很艰难的事。–Thinking in Java

第一: File 类 (只涵盖了文件或者目录的一些情况,并没有读写具体文件的能力)
1. 一个File类的对象,表示了磁盘上的文件或者目录
2. File 类提供了与平台无关的方法来对磁盘上的文件或者目录进行操作
3. File类直接处理文件和文件系统
4. File类没有指定信息怎样从文件读取或者向文件写入
5. File 类描述了文件本身的属性
6. File对象用来获取或者处理与文件相关的信息,如权限,时间,日期,或者目录路径等,还可以浏览子目录层次结构

File 类中的一些重要的方法:

构造方法:
创建一个文件,目录存放位置和文件名以字符串的方式输入
window 上的文件目录表示G:\myfile\aa.txt, 但是在java中\ 表示的转义符,会把\后面的一个字符转义
所以 有三种方式在java中可以表示目录
1. G:\myfile\aa.txt (第一个\ 会把第二个\ 转成 )
2. G://myfile//aa.txt
3. G:/myfile/aa.txt (建议这样写,因为其他系统的文件表示路径也是这样写的,window比较特殊用的是\ ,如果不这样写,可能移植到其他系统不兼容)

当使用了 File file1 = new File(“G:/a1.txt”);之后,注意的是文件并没有被创建, 必须必须调用createNewFile(),文件才被创建
构造方法:
主要使用的是三种构造方法,

    // 几种构造方式
        File file1 = new File("G:/a1.txt");
        // 后面的文件的路径最后加不加 / 都没有影响
        File file2 = new File("G:", "a2.txt");
        File file = new File("G:/");
        File file3 = new File(file, "a3.txt");

        File  file6 = new File(File.separator); // 该文件当前路径下的盘符 G:

        //  上面的只是指定了文件的路径和文件的名字,但是实际文件还没有创建,
        //必须调用createNewFile(),文件才被创建
        try {
            file1.createNewFile();
            file2.createNewFile();
            file3.createNewFile();

        } catch (IOException e) {
            e.printStackTrace();
        }

删除和判断语句:

        file1.delete();  // 删除,如果删除的是目录,必须该目录下为空才能被删除
        file1.isFile(); // 判断是文件
        file1.isDirectory();  // 判断是目录 

目录管理的一些方法

        // 目录管理的一些方法:
        File file4 = new File("G:/a/b/c");
        file4.mkdirs(); // 如果路径不存在,系统会将这几个路径全部都创建好,
// 需要注意的一点是,File file4 = new File("G:/a/b/c/a.txt");  此时它会认为a.txt也是一个目录,而不是一个文件

    //  file4.mkdir();   //如果路径不存在, 系统不会创建该路径

        // 这个方法会将当前路径下存放的文件或者目录的名称全部获取,但是不会获取子目录的目录或者文件
        String[] names = file4.list(); 
        for (String name:names){
            //   System.out.println(name);
        }
       // 跟 list() 功能一样,只是返回的是一个File[] 数组
         File[] filenames = file.listFiles();

获取指定文件名的几种方法:
第一种: 遍历,然后进行判断,主要是使用了这两种方法,任何一个都可以
这里讲解一下String的两个方法 :
endsWith(String s); // // 判断一个字符串是否以 s 结尾
lastIndexOf(String s): // 这个函数是从后往前查找字符串中是否存在 s 字段,如果没找到返回 -1

第二种: 使用FilenameFilter 文件名过滤器, 其实是使用了策略模式
FilenameFilter

// 寻找某个目录下的指定后缀名的文件
         // 第一步: 定位到目录下
          File file5 = new File("G:/a/b/c");
          // 第一种办法,遍历,判断是否以.java 结尾
          String[] namesss = file5.list(); 
          for (String name: namesss){
               if(name.endsWith(".java")){ // 判断是否以  .java结尾  
                   System.out.println(name);
               }
        //     if(name.lastIndexOf(".java") != -1){ // 判断是否以  .java结尾  
                 // lastIndexOf(String str) 这个函数是从后往前查找字符串中是否存在 .java 字段,如果没找到返回 -1
    //             System.out.println();
    //         }
            }
          //  第二种方法 : 使用FilenameFilter, 文件名称过滤器 , 其实使用了策略模式
          //  String[] list(FilenameFilter  nameFilter)  
          //  该形式中,nameFilter是一个实现了FilenameFilter接口的类的对象
          //  该接口中只有一个方法 accept()

          //  使用了匿名内部类 ,当然也可以专门写一个类,然后传该类的一个对象进去
           namesss = file5.list( new FilenameFilter(){  // 
            @Override
            //  两个参数,第一个是待测试的文件目录,另外一个是待测试的文件本身
            public boolean accept(File dir, String name) {
                // TODO Auto-generated method stub
                if(name.endsWith(".java")){
                    return true;
                }
                return false;
            }     
          }); 

           //上面的匿名类的实现等价于下面的这一句, NameFilter是一个实现了FilenameFilter接口的类 
    //   namesss = file5.list(new NameFilter()); 

           for (String name: namesss){
               System.out.println(name);
           }



class NameFilter  implements  FilenameFilter{

    @Override
    public boolean accept(File dir, String name) {
        // TODO Auto-generated method stub
        if(name.endsWith(".java")){
            return true;
        }
        return false;
    }

} 

// 递归实现删除一个目录下的所有文件, 在File类的delete()函数中,如果是文件可以直接删除,如果是目录,必须目录下面为空才可以删除。

public  void  deleteAll(File file){
  // 首先要为递归函数选择一个出口
  if(file.isFile() || 0 == file.list().length ){
       file.delete();
  }else{
     // 要把该目录下的所有的文件都删除
     File  files = file.listFile();
     for (File f: files){
        deleteAll(f);
        f.delete();
     }
  }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值