一、Flie类的基本用法
java.io.File类:代表文件和目录。 在开发中,读取文件、生成文件、删除文件、修改文件的属性时经常会用到本类。
File类的常见构造方法:public File(String pathname)
以pathname为路径创建File对象,如果pathname是相对路径,则默认的当前路径在系统属性user.dir中存储,如下示例所示。
示例:文件的创建
import java.io.File;
public class TestFile1 {
public static void main(String[] args) throws Exception {
System.out.println(System.getProperty("user.dir"));
File f = new File("a.txt"); //相对路径:默认放到user.dir目录下面
f.createNewFile();//创建文件
File f2 = new File("d:/b.txt");//绝对路径
f2.createNewFile();
}
}
在eclipse项目开发中,user.dir就是本项目的目录。因此,执行完毕后,在本项目和D盘下都生成了新的文件(如果是eclipse下,一定按F5刷新目录结构才能看到新文件)。如下图所示。
通过File对象可以访问文件的属性:
示例:测试File类访问属性的基本用法
import java.io.File;
import java.util.Date;
public class TestFile2 {
public static void main(String[] args) throws Exception {
File f = new File("d:/b.txt");
System.out.println("File是否存在:"+f.exists());
System.out.println("File是否是目录:"+f.isDirectory());
System.out.println("File是否是文件:"+f.isFile());
System.out.println("File最后修改时间:"+new Date(f.lastModified()));
System.out.println("File的大小:"+f.length());
System.out.println("File的文件名:"+f.getName());
System.out.println("File的目录路径:"+f.getPath());
}
}
运行结果:
通过File对象创建空文件或目录(在该对象所指的文件或目录不存在的情况下)
实例代码:
import java.io.File;
import java.io.IOException;
import java.util.Date;
/**
* 测试File类的基本用法
*
*/
public class Test {
public static void main(String[] args) throws IOException {
//获取系统中的File(如果File是文件,那么就是文件;如果是目录,那么就是目录)
//File f = new File("d:/a.txt");
File f = new File("d:\\a.txt"); //正反斜杠的写法
System.out.println(f); //只打印文件的地址,不会打印文件内容
//将a.txt重命名为bb.txt
f.renameTo(new File("d:/bb.txt"));
//在eclipse里跑打开的是eclipse的工作目录
System.out.println(System.getProperty("user.dir"));
//创建一个新的文件
File f2 = new File("gg.txt"); //不加目录,默认建在当前
f2.createNewFile(); //创建新的文件,抛出异常
System.out.println("File是否存在:"+f2.exists());
System.out.println("File是否是目录:"+f2.isDirectory());
System.out.println("File是否是文件:"+f2.isFile());
System.out.println("File最后修改时间:"+new Date(f2.lastModified()));
System.out.println("File的大小:"+f2.length());
System.out.println("File的文件名:"+f2.getName());
System.out.println("File的目录路径:"+f2.getPath()); //当前文件,直接导出来了
System.out.println("File的目录路径:"+f2.getAbsolutePath()); //绝对路径
}
}
示例:使用mkdir创建目录
import java.io.File;
public class TestFile3 {
public static void main(String[] args) throws Exception {
File f = new File("d:/c.txt");
f.createNewFile(); // 会在d盘下面生成c.txt文件
f.delete(); // 将该文件或目录从硬盘上删除
File f2 = new File("d:/电影/华语/大陆");
boolean flag = f2.mkdir(); //目录结构中有一个不存在,则不会创建整个目录树
System.out.println(flag);//创建失败
}
}
运行结果:
示例:使用mkdirs创建目录
import java.io.File;
public class TestFile4 {
public static void main(String[] args) throws Exception {
File f = new File("d:/c.txt");
f.createNewFile(); // 会在d盘下面生成c.txt文件
f.delete(); // 将该文件或目录从硬盘上删除
File f2 = new File("d:/电影/华语/大陆");
boolean flag = f2.mkdirs();//目录结构中有一个不存在也没关系;创建整个目录树
System.out.println(flag);//创建成功
}
}
运行结果:
实例:File类的综合应用
import java.io.File;
import java.io.IOException;
public class TestFile5 {
public static void main(String[] args) {
//指定一个文件
File file = new File("d:/sxt/b.txt");
//判断该文件是否存在
boolean flag= file.exists();
//如果存在就删除,如果不存在就创建
if(flag){
//删除
boolean flagd = file.delete();
if(flagd){
System.out.println("删除成功");
}else{
System.out.println("删除失败");
}
}else{
//创建
boolean flagn = true;
try {
//如果目录不存在,先创建目录
File dir = file.getParentFile();
dir.mkdirs();
//创建文件
flagn = file.createNewFile();
System.out.println("创建成功");
} catch (IOException e) {
System.out.println("创建失败");
e.printStackTrace();
}
}
//文件重命名(同学可以自己测试一下)
//file.renameTo(new File("d:/readme.txt"));
}
}
第一次运行结果:
第二次运行结果:
二、递归打印目录树结构(递归遍历目录结构和树状展现)
本节结合前面给大家讲的递归算法,展示目录结构。大家可以先建立一个目录,下面增加几个子文件夹或者文件,用于测试。
示例:使用递归算法,以树状结构展示目录树
import java.io.File;
/**
*
* 使用递归算法打印目录树
*
*/
public class Test {
public static void main(String[] args) {
File f = new File("d:/电影");
printFile(f, 0);
}
/**
* 打印文件信息
* @param file 文件名称
* @param level 层次数(实际就是:第几次递归调用)
*/
static void printFile(File file, int level) {
//输出层次数
for (int i = 0; i < level; i++) {
System.out.print("-");
}
//输出文件名
System.out.println(file.getName());
//如果file是目录,则获取子文件列表,并对每个子文件进行相同的操作
if (file.isDirectory()) {
File[] files = file.listFiles();
for (File temp : files) {
//递归调用该方法:注意等+1
printFile(temp, level + 1);
}
}
}
}
运行结果: