使用File类操作文件或目录属性
java.io
包为我们提供了一些接口和类,对文件进行基本的操作,包括对文件和目录属性的操作、对文件读写的操作等。
File类构造方法
如何使用File 类操作文件或目录:
一个File 对象可以代表一个文件或目录。利用它可以对文件或目录进行基本操作。
//创建一个 File 对象的语法如下:
//pathName表示所指向的文件路径名。
//下面这句代码表示:在内存中构建一个对象,关联了一个路径而已,没有真正
//操作本地系统去创建
File file = new File(String pathName);
//例如:创建一个指向C盘根目录下的test.txt文件的对象
File file = new File("C:\\test.txt");
File file = new File("C:/test.txt");
注意:在 Windows 操作系统中,文件路径名中的分隔符可以使用正斜杠/
;也可以用两个反斜杠\\
File 类常用方法如下:
1.创建功能:
方法名称 | 说明 |
---|---|
boolean createNewFile() |
创建指定名称的空文件,不创建文件夹,如果路径不存在则报错 |
boolean mkdir() |
创建路径,只能创建一层,多层则返回 false 创建失败 |
boolean mkdirs() |
创建多层路径,只能创建文件夹 |
2.删除功能:
方法名称 | 说明 |
---|---|
boolean delete() |
删除此对象指定的文件或文件夹,文件夹不为空则删除失败,返回false |
3.重命名功能:
方法名称 | 说明 |
---|---|
boolean renameTo(File dest) |
重命名功能。如果目标路径和原路径一致,则改名。如果目标路径和原路径不一致,则剪切并改名 |
4.判断功能:
方法名称 | 说明 |
---|---|
boolean exists() |
判断文件或文件夹是否存在 |
boolean isFile() |
判断是否是文件 |
boolean isDirectory() |
判断是否是文件夹 |
boolean canRead() |
判断是否可读 |
boolean canWrite() |
判断是否可写 |
boolean isHidden() |
判断是否隐藏 |
boolean canExecute() |
判断是否可执行 |
5.基本获取功能:
方法名称 | 说明 |
---|---|
String getPath() |
返回此对象表示的文件的相对路径名:当前工程下的路径 |
String getAbsolutePath() |
返回此对象表示的绝对路径名:带盘符的路径 |
String getName() |
返回此对象表示的文件或文件夹的名称 |
long length() |
返回文件的长度,单位为字节,若文件不存在,则返回0L |
long lastModified() |
获取最后修改时间 |
File getParentFile() |
获取父路径的 file 对象 |
6.高级获取功能:
方法名称 | 说明 |
---|---|
String[] list() |
获取当前路径下所有的文件的名字,返回 String 数组。此处无法分清获取到的名字到底是一个文件还是一个文件夹 |
File[] listFiles() |
获取当前文件下所有的文件封装成一个 File 对象。这样操作的好处是可以调用 File 类的功能进行文件的操作 |
例如:
package file_io;
import java.io.File;
import java.io.IOException;
public class FileMethods {
public static void main(String[] args) {
FileMethods fm = new FileMethods();
File file = new File("F:\\demo\\hello.txt");
fm.creat(file);
fm.showFileInfo(file);
// fm.delete(file);
}
/**
* 显示文件信息
* @param file
* 文件对象
*/
public void showFileInfo(File file) {
if (file.exists()) { // 判断文件或目录是否存在
if (file.isFile()) {// 如果是文件
System.out.println("文件名:" + file.getName());
System.out.println("相对路径:" + file.getPath());
System.out.println("绝对路径:"
+ file.getAbsolutePath());
System.out.println("文件大小:"
+ file.length() + "字节");
}
if (file.isDirectory()) {
System.out.println("此文件是目录");
}
} else {
System.out.println("文件不存在");
}
}
/**
* 创建文件的方法
* @param file
* 文件对象
*/
public void creat(File file) {
if (!file.exists()) {
try {
file.createNewFile();
System.out.println("文件创建成功!");
} catch (IOException e) {
e.printStackTrace();
}
} else {
System.out.println("文件已经存在!");
}
}
/**
* 删除文件
* @param file
* 文件对象
*/
public void delete(File file) {
if (file.exists()) {
file.delete();
System.out.println("文件删除成功!");
}
}
}
文件名称过滤器的实现思想及代码
//返回符合文件名称要求的文件名称 String数组
public String[] list(FilenameFilter filter)
//返回符合文件名称要求的文件 File数组
public File[] listFiles(FilenameFilter filter)
具体实现如下:
1.自己写个MyFilter
类 实现 FilenameFilter
接口
import java.io.File;
import java.io.FilenameFilter;
public class MyFilter implements FilenameFilter {
@Override
public boolean accept(File dir, String name) {
//dir->文件的父路径
//name->文件名
//文件名筛选:如果以.jpg结尾则符合要求返回true
//else 返回false 不满足要求
if (name.endsWith(".jpg")) {
return true;
}
return false;
}
}
2.实现筛选:
public static void main(String[] args) {
// file对象 指向目录D:\\
File file = new File("D:\\");
// 调用 file.list(FilenameFilter filter) 方法
// FilenameFilter 是Java自带的接口
//需要匿名对象来调用 即new MyFilter()
//返回 满足要求的文件名字数组
String[] nameList = file.list(new MyFilter());
for (String name : nameList) {
System.out.println(name);
}
//同上 方法返回所有符合要求的文件 数组
File[] fs = file.listFiles(new MyFilter());
for (File f : fs) {
System.out.println(f.getName());
}
}
使用File删除文件夹
目的:使用 File 删除文件夹内所有内容+该文件夹
代码如下:
import java.io.File;
public class DeleteFile {
public static void main(String[] args) {
//路径千万别写成盘符根目录,不然就啥都没了,233
File file = new File("D:\\a");
del(file);
}
public static void del(File path) {
File[] fs = path.listFiles();
for (File f : fs) {
if (f.isFile()) {
System.out.println("文件->" + f.getName() +
" 已被删除:" + f.delete());
} else {
System.out.println("进入了文件夹--->"
+ f.getName());
del(f);
}
}
System.out.println(path.getName() +
"->文件夹已被清空,执行删除文件夹操作!" + path.delete());
}
}