javaapi03

FILE

java.io.File

File用来表示硬盘上的一个文件或目录的(本质是表示一个抽象路径)

使用File可以

  • 访问其表示的文件或目录
  • 创建和删除文件或目录
  • 访问一个目录中所有子项
  • File不能访问文件数据
public class FileDemo{
     public static void main(String[] args){
         /*
          创建File时需要指定路径,而路径通常使用相对路径,绝对路径存在跨平台问题,
相对路径中常见"./"表示当前目录,在IDEA中执行时"./"的位置是当前项目
         
          */   
           File file =new File("./demo1.2.3.432");
           //获取文件大小
        long len=file.length();
        System.out.println(len+":字节");
          //获取名字
         String name =file.getName();
        System.out.println("名字:"+name);
        //是否可读
          boolean cr=file.canRead();
         boolean cw=file.canWrite();
         System.out.println("可读:"+cr);
        System.out.println("可写:"+cw);
        //是否隐藏
        boolean ih = file.isHidden();
        System.out.println("是否隐藏:"+ih);

      }

}

使用File创建一个新文件

createNewFile()方法,可以创建一个新的文件

package file;

import java.io.File;
import java.io.IOException;

/**
 * 使用File创建一个新文件
 */
public class CreateNewFileDemo {
    public static void main(String[] args) throws IOException {
        //在当前项目目录下新建一个文件test.txt
//        File file = new File("./test.txt");
        //在相对路径中"./"可以忽略不写的。默认就是从"./"开始
        File file = new File("test.txt");
        //如果创建文件时指定的目录不存在则会抛出异常:java.io.IOException: 系统找不到指定的路径。
//        File file = new File("./a/test.txt");
        /*
            boolean exists()
            判断当前File表示的文件或目录是否真实存在。若存在则返回true否则返回false

            exists:存在
            create:创建
         */
        if(file.exists()){
            System.out.println("该文件已存在!");
        }else{
            file.createNewFile();//alt+enter(回车) 选第一项Add exception....
            System.out.println("文件已创建!");
        }

    }
}

删除文件

delete()方法可以将File表示的文件删除

package file;

import java.io.File;

/**
 * 删除一个文件
 */
public class DeleteFileDemo {
    public static void main(String[] args) {
        //向当前项目目录下的test.txt文件删除
        File file = new File("test.txt");
        if(file.exists()){
            file.delete();//delete:删除
            System.out.println("该文件已删除!");
        }else{
            System.out.println("该文件不存在!");
        }

    }
}

创建目录

mkDir():创建当前File表示的目录

mkDirs():创建当前File表示的目录,同时将所有不存在的父目录一同创建

package file;

import java.io.File;

/**
 * 创建目录
 */
public class MkDirDemo {
    public static void main(String[] args) {
        //在当前项目目录下新建一个目录(文件夹)demo
//        File dir = new File("demo");
        File dir = new File("a/b/c/d/e/f");
        if(dir.exists()){
            System.out.println("该目录已存在");
        }else{
            /*
                make:做
                directory:目录

                mkdir()创建目录是要求该目录所在的目录必须存在,否则无法创建
                mkdirs()创建目录时会将所有不存在的父目录一同创建出来,推荐使用.
             */
//            dir.mkdir();
            dir.mkdirs();
            System.out.println("该目录已创建!");
        }
    }
}





删除目录

delete():方法可以删除一个目录,但是只能删除空目录 

package file;

import java.io.File;

/**
 * 删除目录
 */
public class DeleteDirDemo {
    public static void main(String[] args) {
        //将当前项目目录下的demo目录删除
//        File dir = new File("./demo");
        File dir = new File("./a");
        if(dir.exists()){
            /*
                delete方法在删除目录时要求该目录必须是一个空目录!!
             */
            dir.delete();
            System.out.println("该目录已删除!");
        }else{
            System.out.println("该目录不存在!");
        }
    }
}

访问一个目录中所有的子项

listFiles()方法可以访问一个目录中的所有子项

package file;

import java.io.File;

/**
 * 访问一个目录中的所有子项
 */
public class ListFilesDemo {
    public static void main(String[] args) {
        //获取当前项目目录下的所有子项
        File dir = new File(".");
        /*
            boolean isFile()
            判断当前File对象表示的是否为一个文件

            boolean isDirectory()
            判断当前File对象表示的是否为一个目录
         */
        if(dir.isDirectory()){
            System.out.println(dir.getName()+":是一个目录");
            /*
                File[] listFiles()
                获取当前File对象表示的目录中的所有子项.
                返回的数组中每个File对象就是该目录中的一个子项.
             */
            File[] subs = dir.listFiles();
            System.out.println(subs.length+"个子项");
            for(File sub : subs){
                System.out.println(sub.getName());
            }
        }

    }
}

获取一个目录中的部分子项

重载的listFile方法:file[] listFile(FileFilter)

package file; 
import java.io.File; 
import java.io.FileFilter;
/*** 重载的listFiles方法,允许我们传入一个文件过滤器从而可以有条件的获取一个目录 * 中的子项。 */
public class ListFilesDemo2 {
       public static void main(String[] args) { 
     /* 需求:获取当前目录中所有名字以"."开始的子项 */ 
       File dir = new File(".");
       if(dir.isDirectory()){ 
 //   FileFilter filter = new FileFilter(){
 //     匿名内部类创建过滤器 
 //       public boolean accept(File file) {
 //      String name = file.getName();
 //     boolean starts = name.startsWith(".");//名字是否以"."开始 
 //      System.out.println("过滤器过滤:"+name+",是否符合要求:"+starts); 
 //      return starts;
 //      } 
 // };
 //    File[] subs = dir.listFiles(filter);//方法内部会调用accept方法
      File[] subs = dir.listFiles(new FileFilter(){ 
      public boolean accept(File file) { 
      return file.getName().startsWith(".");
       }
       }); 
       System.out.println(subs.length); 
     } 
  } 
}

Lambda表达式

  • JDK8之后,java就支持了Lambda表达式这个特性
  • Lambda可以使用更精确的代码创建匿名内部类,但是该匿名内部类实现的接口只能有一个抽象方法,否则无法使用
  • Lambda表达式是编译器认可的,最终还是会将其改为内部类编译到class文件中.
语法:
(参数列表)->{
方法体
    }
public class LambdaDemo1 {
    public static void main(String[] args) {
    //定义一个文件过滤器,规律规则为名字中含有字母"F"
    //文件过滤器的匿名内部类创建形式
      FileFile filter=new FileFilter(){
      public boolean accept(File file){
          return file.getName().contains("F");
        };
   //箭头函数,和上一个函数一样
   //省去了接口名和方法名部分
    FileFilter filter1=(File file)->{
            return file.getName().contains("F");
        } ;
    //还可以省略为,参数列表中的参数类型可以忽略不写
       FileFilter filter2=(file)->{
            return file.getName().contains("F");
        };
      //还可以如下省略
      //前提是:如果方法体中只有一句代码,那么方法体"{}"可以忽略不写,如果这句代码包含return,也要一同忽略
       FileFilter filter3=(file)->file.getName().contains("F");
       //如果只有一个参数,那么参数列表的"()"可以忽略不写
        FileFilter filter4=file->file.getName().contains("F");
       //实际应用
         File dir = new File("./src/main/java/file");
//        File[] subs = dir.listFiles(new FileFilter() {
//            public boolean accept(File file) {
//                return file.getName().contains("F");
//            }
//        });
        File[] subs = dir.listFiles(f->f.getName().contains("F"));


       }
    }

Lambda表达式集合排序

package lambda;

import java.util.*;

/**
 * 集合排序
 */
public class LambdaDemo2 {
    public static void main(String[] args) {
        List<Integer> list=new ArrayList<>();
        Random random=new Random();
        for(int i=0;i<10;i++){
            list.add(random.nextInt(100));
        }
        System.out.println(list);
        //从大到小
//        Collections.sort(list, new Comparator<Integer>() {
//            @Override
//            public int compare(Integer o1, Integer o2) {
//                return o2-o1;
//            }
//        });

        Collections.sort(list,(o1,o2)->o2-o1);
        System.out.println(list);

        list.sort((o1,o2)->o2-o1);
        System.out.println(list);
    }
}

下面这种形式也是lambda表达式

package lambda;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

public class LambdaDemo3 {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("一个");
        list.add("东方");
        list.add("南方");
        System.out.println(list);
        Collections.sort(list, Comparator.comparingInt(String::length));
        System.out.println(list);
    }
}

总结

File类的每一个实例可以表示硬盘(文件系统)中一个文件或目录(实际上表示的是一个抽象路径).

使用File可做到:

  • 访问其表示的文件或目录的属性信息,例如名字,大小,修改时间等等
  • 创建和删除文件或目录
  • 访问一个目录中的子项
  • 不能访问文件数据

常用构造器

  • File(String pathname)
  • File(File parent,String name)

常用方法:

  • length():返回一个long值,表示占用的磁盘空间,单位为字节。
  • canRead()File表示的文件或目录是否可读
  • canWrite()File表示的文件或目录是否可写
  • isHidden()File表示的文件或目录是否为隐藏的
  • createNewFile():创建一个新文件,如果指定的文件所在的目录不存在会抛出异常
  • java.io.FileNotFoundException
  • mkdir:创建一个目录
  • mkdirs:创建一个目录,并且会将所有不存在的父目录一同创建出来,推荐使用。
  • delete():删除当前文件或目录,如果目录不是空的则删除失败。
  • exists():判断File表示的文件或目录是否真实存在。true:存在 false:不存在isFile():判断当前File表示的是否为一个文件。
  • isDirectory():判断当前File表示的是否为一个目录
  • listFiles():获取File表示的目录中的所有子项
  • listFiles(FileFilter fifilter):获取File表示的目录中满足fifilter过滤器要求的所有子项

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Galaxy@

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值