day26_File(文件)流和Lambda表达式

今日内容:

  • File流(文件操作)

  • Lambda表达式

File流

(主要就是一些关键字以及使用方法)

1.分隔符

           static String pathSeparator    ;  与系统有关的路径分隔符,为了方便,它被表示为一个字符串。 
           static char pathSeparatorChar  ;  与系统有关的路径分隔符。 
           static String separator          与系统有关的默认名称分隔符,为了方便,它被表示为一个字符串。 
           static char separatorChar        与系统有关的默认名称分隔符。 

使用格式:

String pathseparator = File.pathSeparator;
System.out.println(pathseparator);// ;

String separator = File.separator;
System.out.println(separator);//

2.File:用于路径映射,通过输入的字符串将其转化成路径抓取

路径:
绝对路径: 是一个完整的路径 一般以盘符(D:,C:,c:,d:)为开头
    如: D:DeveloperJavajdk1.8.0_191README.html
相对路径:是一个简化的路径
    E:codesworkspaceday26_LambdaAndFile.classpath---->简化为:.classpath(可以省略前面项目的根目录)
注意:
    1.路径是不区分大小写
    2.路径中的文件名称分隔符windows使用反斜杠,反斜杠是转义字符,两个反斜杠才代表一个普通的反斜杠。

格式:
        File f1 = new File("D:\小鸟\one\two");
        System.out.println(f1);//D:\小鸟\one\two

3.获取功能的方法

public String getAbsolutePath():返回此File表示的绝对路径名字符串。 
public String getPath():将此File转换为路径名字符串   源码调用toString方法
public String getName():返回由此File表示的文件或目录的名称。  末尾文件显示
public long length():返回此File表示的文件的长度。  末尾文件的大小,如果文件不存在,为0;


格式    File f1 = new File("D:\小鸟\one\two");
    String absolutePath = f1.getAbsolutePath();
    System.out.println(absolutePath);// D:小鸟one	wo

    File f2 = new File(".classpath");
    String path2 = f2.getPath();
    System.out.println(path2);// .classpath

    File f1 = new File("D:\小鸟\one\two");
    String name = f1.getName();
    System.out.println(name);//two

    File f2 = new File("C:\Users\挖掘机\Desktop\File\demo01");
    long length2 = f2.length();
    System.out.println(length2);//4096

4.判断功能的方法

public boolean exists():判断File表示的文件或者文件夹是否实际存在 //绝对位置找直接找。没有就是false 相对位置找从这个文档的项目开始找
public boolean isDirectory():判断此File表示的文件夹是否存在
public boolean isFile():判断此File表示的文件是否存在

格式:
        File f1 = new File("D:\小鸟\one\two");
        System.out.println(f1.exists());// true

        File f5 = new File("123.txt");
        System.out.println(f5.exists());//false

        File f1 = new File("E:\codes\workspace\day26_LambdaAndFile\.classpath");
        System.out.println(f1.isDirectory());// false
        System.out.println(f1.isFile());// true

5.删除添加文件夹/文件

public boolean createNewFile():当且仅当具有该名称的文件不存在时,创建一个空文件,返回值是true
注意:
    1. 此方法不能创建文件夹,只能创建文件
    2. 创建文件的路径必须存在,否则就抛出异常。

public boolean delete():删除由此File表示的文件或者目录    删除空文件夹,文件不用为空
此方法,可以删除构造方法路径中给出的文件或者文件夹
    注意:
         delete方法时直接从磁盘删除文件/文件夹,不经过回收站。    
         文件夹中有内容不能删除,但是文件中有内容不影响删除
         删除的路径可以是相对路径也可以是绝对路径,
         如果是相对路径,则查看当前项目的根目录是否有该文件或者文件夹,
             如果有且内容为空删除,如果没有返回false,删除失败。

public boolean mkdir():创建由此File表示的文件夹   一层一层创建文件夹 
创建单级空文件夹
public boolean mkdirs():创建由此File表示的文件夹,包括任何必须但是又不存在的父目录     创建很多层文件夹。
既可以创建单级空文件夹,也可以创建多级孔文件夹
     注意:
        此方法只能创建文件夹,不能创建文件
        路径不对也不会抛出异常,可以使用相对路径也可以使用绝对路径

格式:
        File f1 = new File("D:\小鸟\one\two");
        boolean b1 = f1.createNewFile();
        System.out.println(b1);// false

        File f1 = new File("D:\小鸟\one\two\125");
        boolean b1 = f1.mkdir();
        System.out.println(b1);// true  创建123文件夹

        File f1 = new File("E:\codes\workspace\day26_LambdaAndFile\aa");
        boolean b1 = f1.delete();
        System.out.println(b1);

6.目录的遍历

public String[] list():返回一个String数组,表示该File目录中的所有的子目录或者子文件。(子目录子文件)
public File[] listFile():返回一个File数组,表示该File目录中的所有的子目录或者子文件。(子目录路径和子文件路径)

注意事项:
list方法和listFile方法遍历的是构造方法中指定的目录。
如果构造方法中给出的目录的路径不存在,会抛出空指针异常。
如果构造方法中给出的目录不是一个目录,也会抛出一个空指针异常。

File file = new File("E:\codes\workspace\day26_LambdaAndFile");
String[] list = file.list();
// 遍历
for (String string : list) {
System.out.println(string);
}

File file = new File("E:\codes\workspace\day26_LambdaAndFile");
File[] list = file.listFiles();
// 遍历
for (File f : list) {
System.out.println(f.toString());
}

Lambda表达式

标准格式:
(参数类型1 参数名称1,参数类型2 参数名称2,....) -> {代码语句}

格式说明

 小括号内的语法与传统的方法参数列表一致,无参数就留空,多个参数则用逗号隔开
 ->数新引入的语法格式,代表指向的动作 
 大括号里的语法与传统方法体要求基本一致

Lambda省略格式:

Lambda强调的是做什么,而不是怎么做,所以凡是可以根据上下文推到得知的信息,都可以省略。比如:

invokeSum(3.14, 3.15, (double d1,double d2) ->{
                return d1 + d2;
    });
//省略格式表达
invokeSum(3.14,3.15,(d1,d2)->d1+d2);

省略的规则

在Lambda标准格式的表达式的基础上,使用省略写法的规则是:

​    1.小括号内参数参数的类型可以省略

​    2.如果小括号内有且仅有一个参数,则小括号也可以省略

​    3.如果大括号内有且仅有一个语句,则无论是否有返回值,都可以省略大括号,return关键字和语句的分号

Lambda使用的前提

Lambda的语法非常的简洁,使用非常的简单,但是有以下注意事项:

1.使用Lambda必须由接口,且要求接口中有且仅有一个抽象方法

   无论JDK内置的Runnable、Comparator接口还是自定义的接口,只有当接口中的抽象方法存在且唯一,才可使用Lambda

2. 使用Lambda必须具有上下文推断。

   也就是方法的参数或者局部变量类型必须为Lambda对应的接口类型,才能使用Lambda作为该接口的实例。

备注:如果有且仅有一个抽象方法的接口,称为函数式接口
原文地址:https://www.cnblogs.com/rxqq/p/14131766.html