目录
Java文件类File 用来将文件或者路径封装对象(可以是已经存在或者不存在),方便对文件与文件夹属性操作,File 可以作为参数传递给流的构造函数。
File类
File f1= new File(" c:\\a.txt");// 一个参数
File f2= new File("c:\\","a.txt");// 两个参数
Fille f3 =new File(" c:\\");//路径
File f4= new File(f3,"a.txt");
FileReader(File file) 创建一个新的 FileReader ,给出 File读取。
字段分隔符:separator
public static void separator(){
System.out.println("E:"+File.separatorChar+"abc"+System.getProperty("file.separator")+"test.txt");//E:\abc\test.txt
System.out.println("E:"+File.separator+" test2.txt");// E\ test2.txt
System.out.println("E:\\test3.txt"+File.pathSeparator+"E:\\test4.txt");//E:\test3.txt;E:\test4.txt
}
pathSeparator 代表不同路径的分隔符:系统环境变量里:
常用方法:
- 获取
获取文件最后修改时间;lastModified()
public static void file_function(){
File file =new File("a.txt");
String name =file.getName();// 文件名称
System.out.println(name);
String absoluteepath= file.getAbsolutePath();//绝对路径
System.out.println(absoluteepath);
String path= file.getPath();//相对路径
long len = file.length();//文件长度
long time = file.lastModified();//最后修改时间: 开一个线程每三秒监视一次文件,可以用于文件一但被修改就读取文件数据。
Date date = new Date(time);
DateFormat dateFormat =DateFormat.getDateTimeInstance(DateFormat.LONG,DateFormat.LONG);
String str_time = dateFormat.format(date);
System.out.println(str_time);
System.out.println(file.getParent());//父目录
}
2.创建&删除
文件:
-
-
boolean
createNewFile()
true
如果命名文件不存在并被成功创建;false
如果命名文件已经存在和输出流不一样。输出流不管文件存不存在都会创建。
-
-
-
boolean
delete()
删除由此抽象路径名表示的文件或目录。
-
-
-
void
deleteOnExit()
请求在虚拟机终止时删除由此抽象路径名表示的文件或目录,一旦请求删除,就无法取消请求。 因此,该方法应谨慎使用。
-
例如 file.createNewFile创建 ---io流操作时候抛出异常了,---deleOnExit()
目录:
目录为空的时候才能删除
File dir= new File("abc");
System.out.println("目录是否存在"+dir.exists());
System.out.println("目录路径"+dir.getAbsolutePath());//目录路径E:\java\20190420_1\abc
ret= dir.mkdirs();//创建文件夹
System.out.println("目录创建:"+ret );
// dir.delete() 路径删除
File file1 =new File("abc"+File.separatorChar+"test.txt");
file1.createNewFile();
ret= dir.delete();
System.out.println("删除路径:"+ret);//false 因为abc 路径下还有文件 所以删除失败!!!!!
多级目录创建删除问题:
//创建多级目录
File dirs= new File("abcd\\a\\b\\c");
ret= dirs.mkdirs();
System.out.println(" 删除多级目录+"+dirs.delete());// 此时 dirs 是c,abcd\a\b是父路径,只会删除c
3.判断
先判断 文件是否存在 exists 再判断 isFiles() ,isDirectory(),否则 文件不存在时候 isFiles() ,isDirectory() 返回 false
4.重命名
同一路径下 会改名,不同路径下会改名并且剪切。
File file =new File("t20190605.txt");
File file2 = new File(" 哈哈哈.txt");
file.renameTo(file2);
不同路径下:
File file =new File("t20190605.txt");
File file2 = new File(" abc\\哈哈哈.txt"); file.renameTo(file2);
5.系统根目录和容量获取 实际开发中会用到。
6.获取盘符 空闲空间 已用空间
练习 获取本机最大空闲盘符:
7.获取目录下内容
lIst 当前目录下所有文件和文件夹名称 包括隐藏文件,封装 的是必须是目录,如果 File file_names =new File("c:\\test.txt"); 是文件不是目录回报String[] 为空 ,NUllPointExeption,如果是访问系统目录 也会空指针异常。如果目录存在但是会返回 String[] ,长度为0.
File file_names =new File("c:\\");
for(String file_name : file_names){
System.out.println(file_name);
}
过滤器:重载方法 该过滤器只能过滤文件名称。
过滤器的原理:
源码:
public String[] list(FilenameFilter var1) {
String[] var2 = this.list();
if (var2 != null && var1 != null) {
ArrayList var3 = new ArrayList();
for(int var4 = 0; var4 < var2.length; ++var4) {
if (var1.accept(this, var2[var4])) {
var3.add(var2[var4]);
}
}
return (String[])var3.toArray(new String[var3.size()]);
} else {
return var2;
}
}
demo 过滤文件后缀为“.java”的文件
import java.io.File;
import java.io.FilenameFilter;
public class MyFileNameFilter implements FilenameFilter {
@Override
public boolean accept(File file, String s) {
System.out.println(" file by java "+s);
return s.endsWith(".java");
}
}
/***
* 文件名称过滤器
*/
public static void fileNameFilter(){
File dir =new File("E:\\java\\20190420_1\\src");
String[] file_names= dir.list( new MyFileNameFilter());
for(String filename: file_names){
System.out.println(" filename:"+filename);
}
}
过滤隐藏文件;
判断文件是否是隐藏的: isHidden()
package day22;
import java.io.File;
import java.io.FileFilter;
public class MyHiddenFIleFilter implements FileFilter {
@Override
public boolean accept(File file) {
return file.isHidden();//是隐藏文件
}
}
/***
* 文件名称过滤器
*/
public static void fileNameFilter(){
File dir =new File("E:\\java\\20190420_1\\src");
String[] file_names= dir.list( new MyFileNameFilter(".java"));
for(String filename: file_names){
System.out.println(" filename:"+filename);
}
//获取隐藏文件
File dir2 =new File("C:\\");
File[] files =dir2.listFiles(new MyHiddenFIleFilter());
for(File file: files){
System.out.println(" "+file.getName()+" isHidden ="+file.isHidden());
}
}