简述File
用户界面和操作系统使用依赖于系统的路径名字符串命名文件和目录。 这个类提供了一个抽象的,独立于系统的层次化路径名的视图。 抽象路径名有两个组件:
可以理解File类是一种对文件路径的抽象描述, 对象创建,直接通过绝对路径创建File对象File file = new File("D:\\itcast\\java.txt");
file对象输出的是文件的绝对路径,他是文件路径的抽象表示,虽然可以对文件进行操作,但Flle表示的并不是文件本身,文件路径可以不存在,但是将来需要具体操作实现这个文件。还有两种命名方法 File file1 = new File("D:\\itcat\\ita","java.text");
和File file3 = new File(file1,"mybaits.txt");
简述应用
我先简述File的一些使用,通过File
可以获取文件的路径,所以我们可以痛过File实现磁盘中根据文件名查找文件位置。和目录下文件的输出,而且IO也可以对File对象进行文件输入和输出。的接下来分别讲解File类方法。
方法模块一,创建(creatNewFile
)和获取(get
)信息
首先了解File的简单实用,因为File可以接收磁盘中并不存在的路径,编译时并不会存在问题,班运行时就会报错·。通过File对象创建文件和多级目录creatNewFile()
和mkdir() , mkdirs()
因为file会根据需求使用不同方法创建,所以会有创建文件却调用了mkdir()目录创建方法,最后出错。而get方法何以获取文件信息然后进行处理。
/**
* 使用规范 File file = new File()
* Filet通过对象创建接受文件路径,对于file来说接受的并不是文件本身,而是路径名
* 路径可以是不存在的,但是将来要通过具体操作来讲这个路径内容转化成具体存在的
* 常用方法 cretNewFile() 创建对象接受的文件路径创建文件,已存在:false ; 不存在 : true
* mkdir() File对象接受的路径创建目录 已存在:false ; 不存在 : true
* mkdirs() 创建多级目录 已存在:false ; 不存在 : true
*/
//注意文件的创建是通过方法名确定,而不是路径命名,
//如果接受不是绝对路径,则会将路径信息直接添加到项目路径后
// 如果创建文件调用的却是mkdir()方法,则不会创建文件,而是创建目录
File file = new File("D:\\itcast\\java.txt");
System.out.println(file.createNewFile());
System.out.println(file);
File file1 = new File("D:\\itcat\\ita","java.text");
System.out.println(file1);
File file2 = new File("D:\\itcast\\javSE");
System.out.println(file2.mkdir());
/**
* File获取抽象路径信息get().返回值为字符串,用于遍历删除中条件接受判断。
*/
File file3 = new File("local//mybaits.txt");
System.out.println("====================");
System.out.println(file3.getAbsoluteFile());
System.out.println(file3.getPath());
System.out.println(file3.getName());
结果:
方法模块二 判断(is
)和删除(delete
)
/**
* 用于判断file信息
*/
// 判段抽象路径名是否为目录
System.out.println(file.isDirectory());
// 判断抽象路径名是否为文件
System.out.println(file.isFile());
// 判断抽象路径名是否存在
System.out.println(file.exists());
delect()注意点
在使用删除方法时,正常情况下file对象直接调用该方法即可,但是如果file对象删除文件的上层目录不存在或者删除目录下还有内容呢会直接报错、
对磁盘信息进行查询
两种获取文件下信息,list() 获取目录下的文件和目录信息,返回的是字符串数组和lsitFile(),返回的是File对象数组,还可以再次进行信息提取
/**
* list(),获取路径下的文件,目录信息,通过数组字符串接收
* listFile()获取路径下的文件,目录路径信息,通过File对象接受
*/
System.out.println("====================");
File file4 = new File("D:\\itcast");
String[] list = file4.list();
for (String li : list){
System.out.println(li);
}
/**
* 文件过滤器file.lidtFile(newe FileFilter)
* 通过查询目录下文件信息的绝对路径,listFiles(new FileFilter)可以重写accept方法
* 对方法重写,加入自己要求进行返回,可在查询时就对文件进行处理
*/
file.listFiles(new FileFilter() {
@Override
public boolean accept(File pathname) {
return false;
}
});
File[] files = file4.listFiles();
for (File fi : files){
//可以调用上述方法查看接受信息
System.out.println(fi.getAbsoluteFile());
}
递归案例
可以看成方法中调用本方法,类似于套娃,先简单使用递归,递归的使用,一定要有出口否则会无限套娃内存溢出,递归次数不可太多。
不死兔
求第20个月兔子的对数
/**
* 不死兔
* 1,1,2,3,5,8,...求第二十天兔子
*/
public static void main(String[] args) {
int[] tu = new int[20];
System.out.println(diguitu(20));
}
public static int diguitu(int b){
if (b == 1 || b == 2) {
return 1;
}else {
return diguitu(b-1) + diguitu(b-2);
}
}
递归删除文件
/**
* 递归方法删除 要求
* 1 File接受想要删除的目录信息
* 2 构造方法,接受绝对路径listFile
* 2.1 for遍历,通过获取getName与getAbsolutePath可以判断是否到底
* 到底结束递归 else,调用该方法。
*/
public static void getFileDelet(File file){
//获取删除目录下所有文件绝对路径
File[] files = file.listFiles();
if (files != null){
for (File filei : files){
if (filei.isDirectory()){
getFileDelet(filei);
}else {
System.out.println(filei.getAbsolutePath());
}
}
}
}
递归实现磁盘的文件查找
给定一个路径(E:\itcast),通过递归完成遍历该目录下所有内容,并把所有文件的绝对路径输出在控制台
代码实现
/**
* 编写磁盘下的文件查询
*/
public static void serachFile(File file,String name){
if (file != null && file.isDirectory()){
File[] files = file.listFiles();
for (File file1 : files){
if (file1.isFile()){
// 字符串比较equals精准比较
// file1.getName().contains(name)这是包含关系,只要包含所查字符串就为true
if ( file1.getName().contains(name)){
System.out.println(file1.getAbsolutePath());
Runtime runtime = Runtime.getRuntime();
//通过java虚拟机执行
/*try {
runtime.exec(file1.getAbsolutePath());
} catch (IOException e) {
e.printStackTrace();
}*/
}
}else {
serachFile(file,name);
}
}
}else {
System.out.println("当前位置不是目录");
}
}
}