黛蛾长敛,任是春风吹不展。困倚危楼,过尽飞鸿字字愁。
——秦观《木兰花》
Java的File类
java.io.File
类是文件和目录路径名的抽象表示,主要用于文件和目录的创建、查找和删除等操作。
一个file对象代表的是硬盘中实际存在的一个文件或者一个文件夹。
无论该路径是否在在文件或者文件夹,都不会影响file对象的创建。
路径分隔可以使用”/“ 也可以使用”\“但是在java语言中,”\“具有特殊的含义,所以需要使用转义字符”\“,使用”/“的时候不需要转义
- windows操作系统可以识别”/“,也可以识别”\“
- linux操作系统只认识”/“
1. File类的构造方法
public File(String pathname)
:通过将给定的路径名字符串转换为抽象路径名来创建新的 File实例。
public File(String parent, String child)
:从父路径名字符串和子路径名字符串创建新的 File实例。
public File(File parent, String child)
:从父抽象路径名和子路径名字符串创建新的 File实例。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| public static void main(String[] args) { File file = new File("E:/Dr");
File file11 = new File("E:/Dr","哎呦-喵喵喵喵喵.txt"); File file12 = new File("E:/Dr/","哎呦-喵喵喵喵喵.txt"); File file13 = new File("E:/Dr/","/哎呦-喵喵喵喵喵.txt");
File file2 = new File("E:\\Dr\\D 照片");
File file3 = new File(file,"mm.txt"); }
|
2. 常用方法
public String getAbsolutePath()
:获得file对象的绝对路径
public String getPath()
:获得file文件的路径
public String getName()
:获取文件或文件夹的名称
public long length()
:获得文件的大小(字节为单位)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| public static void main(String[] args) { File file = new File("E:/Dr/D 照片","/mm.txt"); File file2 = new File("dd/ai/mm"); File file3 = new File("E:/Dr/D 照片/范丹/IMG_20180217_165312.jpg"); String absolutePath = file.getAbsolutePath(); System.out.println( "absolutePath = " + absolutePath );
String path = file.getPath(); System.out.println( "path = " + path );
String name = file2.getName(); System.out.println( "name = " + name );
long length = file3.length(); System.out.println( "length = " + length ); }
|
public boolean exists()
:此File表示的文件或目录是否实际存在。
public boolean isDirectory()
:此File表示的是否为目录。
public boolean isFile()
:此File表示的是否为文件。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| public static void main(String[] args) { File file = new File("E:/Dr/D 照片/mm.txt");
boolean exists = file.exists(); System.out.println( "exists = " + exists );
File file1 = new File("D:/workspace/out"); boolean exists1 = file1.exists(); System.out.println( "exists1 = " + exists1 );
boolean directory = file1.isDirectory(); System.out.println( "directory = " + directory );
boolean file2 = file1.isFile(); System.out.println( "file2 = " + file2 ); }
|
public boolean createNewFile()
:当且仅当具有该名称的文件尚不存在时,创建一个新的空文件。
public boolean delete()
:删除由此File表示的文件或目录(空目录)。
public boolean mkdir()
:创建由此File表示的目录。
public boolean mkdirs()
:创建由此File表示的目录,包括任何必需但不存在的父目录。
2.1 目录的遍历
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| @Test public void test() throws IOException { File file = new File("E:/file"); String[] list = file.list(); for (String s : list) { System.out.println("s = " + s); } File[] files = file.listFiles(); for (File file1 : files) { System.out.println("file1 = " + file1); } }
|
3. 案例
- 搜索
E:/Dr
目录中的
.doc 文件。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| @Test public void test(){ File file = new File("E:/Dr"); String suffix = ".doc"; search(file,suffix); }
public void search(File file, String suffix){ File[] files = file.listFiles(); for (File file1 : files) { if(file1.isDirectory()){ search(file1,suffix); }else{ String name = file1.getName(); if(name.endsWith(suffix)){ System.out.println(file1.getName()); } } } }
|
文件过滤器FileFilter
分析:
接口作为参数,需要传递子类对象,重写其中方法。我们选择匿名内部类方式,比较简单。
accept
方法,参数为File,表示当前File下所有的子文件和子目录。保留住则返回true,过滤掉则返回false。保留规则:
要么是.java文件。
要么是目录,用于继续遍历。
通过过滤器的作用, listFiles(FileFilter)
返回的数组元素中,子文件对象都是符合条件的,可以直接打印。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
|
@Test public void test(){ File file = new File("E:/Dr"); File[] files = file.listFiles(new MyFilter()); for (File file1 : files) { if(file1.isFile()) System.out.println( "file1 = " + file1 ); } }
class MyFilter implements FileFilter { @Override public boolean accept(File file) { if(file.getName().endsWith( ".jpg" )){ return true; } return false; } }
|
分析: FileFilter
是只有一个方法的接口,因此可以用lambda表达式简写。lambda
格式: ()‐>{ }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
|
public class HomeWorkFour { @Test public void Test(){ File file = new File("E:\\Dr\\D 照片\\荣耀八\\portrait"); File[] files = file.listFiles((pathname) -> pathname.getName().endsWith( ".jpg" )); for (File file1 : files) { if(file1.isFile()){ System.out.println(file1.getName()); } } } @Test public void Test01(){ File file = new File("D:\\workspace\\day07\\src\\cn\\justweb\\Demo"); File[] files = file.listFiles(new FileFilter(){ @Override public boolean accept(File file) { if(file.getName().endsWith( ".java" )){ return true; } return false; } }); for (File file1 : files) { if(file1.isFile()){ System.out.println(file1.getName()); } } } }
|
☆