目录
准备工作:在F:\blackhorse\mavenproject下创建FileIOUpload项目
准备工作:在F:\blackhorse\mavenproject下创建FileIOUpload项目
java.io.File
类是文件和目录路径名的抽象表示,主要用于文件和目录的创建、查找和删除等操作。
1、1 字段摘要
static String | pathSeparator 与系统有关的路径分隔符,为了方便,它被表示为一个字符串。 |
static String | separator 与系统有关的默认名称分隔符,为了方便,它被表示为一个字符串。 |
路径分隔符(分号)===> ;
名称分隔符(反斜杠)===>\
这里给出的路径分隔符和名称分隔符都是Window系统的,其实路径分隔符也好,名称分隔符也好,他们会随系统的不同而不同,比如Linux的名称分隔符就是双斜杠,而合理的使用上面两个字段,能有效的避免项目在不同平台出现不必要的错误
1、2构造方法
public File(String pathname):通过将给定的路径名字符串转换为抽象路径来创建新的File实例
public File(String parent,String child):从父路径名字符串和子路径字符串创建新的File实例
public File(File parent,String child):从父抽象路径名对象和子路径茗茶资符串创建新的File实例
public File(URI uri) 通过给你定的file:URI转换为一个抽象路径名来创建一个新的File实例
Tips:
File file = new File("");//1
String absolutePath = file.getAbsolutePath();
File file1 = new File(absolutePath);//2
System.out.println(file);
System.out.println(file1);
对于上面一段代码,两个输出语句输出的结果都是一样的,但表示的含义不同,1处读的是个空文件,所以file输出的是一个空文件的路径,其真实输出应该是“F:\blackhorse\mavenproject\null”(实际输出是F:\blackhorse\mavenproject);而file.getAbsolutePath获取的是“当前项目所在根目录下的一个空文件”的路径,而“当前项目所在根目录下的一个空文件”的路径(实际输出)其字符串又可以被解读为“当前项目”的根路径。所以当这个参数absolutePath被传进File的构造方法中后,2处读到的实际上是当前项目的父工程的路径,两者输出的结果虽然一样,但表示含义不同。此处在刚入门java时有被绊倒,用1的方法直接遍历文件夹,发现遍历为空。在进行文件遍历时1处因为读到的是个空文件,所以不能遍历,而2处就可以遍历 。也可以用File类提供的exits()方法进行判断,会发现1处是false而2处是true。
1、3 静态成员方法
静态方法:
static String pathSeparator 与系统有关的路径分隔符
static String separator 与系统有关的默认名称分隔符
static File |
|
static File | createTempFile(String prefix, String suffix, File directory) 在指定目录中创建一个新的空文件,使用给定的前缀和后缀字符串生成其名称。 |
这里需要注意,前缀prefix的长度被规定不能小于3.,否则会报"Prefix string too short" 异常
1、4 常用方法
public String getAbsolutePath():返回此File的绝对路径字符串
public String getPath():将此File转换为路径名称字符串。
public String getName():返回由此File表示的文件或目录的名称
public long length():返回由此File表示的文件的字节长度
常用来做判断的方法
public boolean exists() :判断文件或目录是否存在
public boolean isDirectory():判断是否为目录,不是或不存在为false
public boolean isFile():判断是否为文件,是为true,不是或不存在为false
创建、删除功能的方法
public boolean createNewFile():创建File文件,成功返回true,失败返回false
public boolean delete():删除此File所代表的文件可以删除任意文件,但只能删除空的文件夹,且删除不走回收站
public boolean mkdir():创建单级文件夹
public boolean mkdirs():创建单级和多级文件夹
目录的遍历:
public String[] list():返回一个String数组,表示该File目录中的所有子文件或目录
public File[] listFiles():返回一个Fille数组,表示该File目录中的所有子文件或目录
1、5文件遍历小Demo
遍历当前项目所在更目录下的所有文件夹及文件
package com.heronsbill.test;
import java.io.File;
/**
* @JDK: 1.8
* @Author: heronsbill
* @DATA: 2019/8/26
*/
public class Test3 {
public static void main(String[] args) {
File file1 = new File("");
File file2 = new File(file1.getAbsolutePath());
queryFiles(file2);
}
public static void queryFiles(File file) {
if (file.isDirectory()) {
System.out.println("文件夹:" + file.getAbsolutePath());
File[] files = file.listFiles();
for (File file1 : files) {
queryFiles(file1);
}
} else {
System.out.println("文件名" + file.getAbsolutePath());
}
}
}
1、6使用Lambda表达式实现文件过滤
1、这里使用FileFilter这一函数型接口,对File的listFile()方法进行过滤
2、Lambda表达式是JDK1.8开始的新特性,其作用之一就是针对函数式接口进行简化,其由一些参数,一个箭头,一段代码组成,格式为(参数列表)->{代码语句}
格式说明:
小括号内的语法与传统方法参数列表一致,无参则留空,多个参数则用逗号隔开
->是新引入的语法格式,代表指向动作
大括号内的语法与传统方法体要求基本一致
Lambda省略规则:
- 小括号内参数的类型可以省略
- 如果小括号内仅有一个参数,则小括号也可以省略
- 如果大括号内有且仅有一个语句,则无论是否有返回值,都可以省略:大括号,return关键字和语句的分号(这仨要么不省,要么都省!)
代码如下:
package com.heronsbill.test;
import java.io.File;
/**
* JDK:1.8
* @Author: heronsbill
* @DATA: 2019/8/26
*/
public class Test4 {
public static void main(String[] args) {
File file1 = new File("D:\\aaa");
File file2 = new File(file1.getAbsolutePath());
queryFiles(file2);
}
public static void queryFiles(File file) {
if (file.isDirectory()) {
System.out.println("文件夹:" + file.getAbsolutePath());
File[] files = file.listFiles((File pathname)->"b.txt".equals(pathname.getName())||pathname.isDirectory());
for (File file1 : files) {
queryFiles(file1);
}
} else {
System.out.println("文件名" + file.getAbsolutePath());
}
}
}
1、7总结:
File类是文件和目录路径名的抽象表示,主要用于文件和目录的创建、查找和删除等操作。而文件的操作在软件设计的任何时刻都是至关重要的知识点,熟练掌握File对文件的操作对后面框架本身还是其代码原理的解读都有极大的帮助。
能力尚浅,有待进步,如有不足,不吝赐教!