-
java.io.File
-
File的每一个实例用于表示硬盘上的一个文件或目录
-
使用File可以:
-
1:访问其表示的文件或目录的属性信息(名字,大小,修改时间等等)
-
2:操作文件或目录(创建,删除)
-
3:访问一个目录中的所有子项
-
但是不能访问文件数据
-
@author EP
-
使用File创建一个新文件
-
@author EP
public class FileDemo {
public static void main(String[] args) {
/*
* 相对路径:“.”表示当前目录
*/
File file = new File("./demo.txt");
//length方法返回一个long值,表示该文件的字节量
long len = file.length();
System.out.println(len+"字节");
//获取文件名
String name=file.getName();
System.out.println("name:"+name);
//是否可读或可写
boolean cr=file.canRead();
boolean cw=file.canWrite();
System.out.println("是否可读:"+cr);
System.out.println("是否可写:"+cw);
}
}
public class CreatNewFileDemo {
public static void main(String[] args) throws IOException {
//在当前目录下新建一个文件:test.txt
File file = new File("./test.txt");
/*
* boolean exists()
* 判断当前File表示的文件或目录是否已经存在
*/
if (!file.exists()) {
file.createNewFile();
System.out.println("文件已创建");
}else {
System.out.println("文件已存在");
}
}
}
- 删除一个目录
- @author EP
public class DeleteDirDemo {
public static void main(String[] args) {
//删除当前目录下的demo目录
File dir = new File("./a");
if (dir.exists()) {
dir.delete(); //删的必须是空目录,否则不行
System.out.println("目录已删除");
}else {
System.out.println("目录不存在");
}
}
}
- 删除一个文件
- @author EP
public class DeleteFileDemo {
public static void main(String[] args) {
//将当前目录下的test.txt文件删除
File file = new File("./test.txt");
if (file.exists()) {
file.delete();
System.out.println("文件已删除");
}else {
System.out.println("文件不存在");
}
}
}
- 创建一个目录
- @author EP
public class MkdirDemo {
public static void main(String[] args) {
//在当前目录下新建一个名为demo的目录
File dir = new File("./demo");
if (!dir.exists()) {
dir.mkdir();
System.out.println("目录已创建!");
}else {
System.out.println("目录已存在!");
}
}
}
- 创建一个多级目录
- @author EP
public class MkdirsDemo {
public static void main(String[] args) {
//在当前目录下新建a/b/c/d/e/f目录
File dir = new File("./a/b/c/d/e");
if (!dir.exists()) {
dir.mkdirs(); //会连同将不存在的父目录一同创建出来
System.out.println("目录已创建!");
}else {
System.out.println("目录已存在!");
}
}
}
- 获取一个目录中的所有子项
- @author EP
public class ListFilesDemo {
public static void main(String[] args) {
//获取当前目录下的所有子项
File dir = new File("./bin");
/*
* boolean isFile()
* 判断当前File对象表示的是否是一个文件
*
* boolean isDirectory();
* 判断当前File对象表示的是否是一个目录
*/
if (dir.isDirectory()) {
File[]subs=dir.listFiles();
System.out.println("当前目录中有"+subs.length+"个子项");
for (int i = 0; i < subs.length; i++) {
File sub = subs[i];
System.out.println(sub.getName());
}
}
}
}`
- 重载的listFiles方法允许我们添加一个文件过滤器
- 目的是在获取某个目录下的子项时可以进行筛选,仅将符合要求的子项获取回来。从自建类,到匿名类,到匿名类写法的优化,到lambda表达式的优化。
- @author EP
public class ListFileDemo2 {
public static void main(String[] args) {
//获取当前目录下所有名字以“.”开头的子项
File dir = new File(".");
if (dir.isDirectory()) {
/*
* File[]listFiles(FileFilter fileFilter) 传参内容必须是FileFilter类
* 获取可以通过给定过滤器accept(返回为true的)方法的所有子项
*/
//使用匿名内部类形式创建
// FileFilter fileFilter = new FileFilter() {
//
// @Override
// public boolean accept(File pathname) {
// // TODO Auto-generated method stub
// return pathname.getName().startsWith(".");
// }
// };
// File[]subs=dir.listFiles(new FileFilter() {
//
// @Override
// public boolean accept(File pathname) {
// // TODO Auto-generated method stub
// return pathname.getName().startsWith(".");
// }
// });
/*
* 这里利用到了回调模式
* 当我们调用一个方法时,传入一个类,而这个方法在运行过程中会用到
* 我们传入的类中的方法做操作时,这个现象是回调模式
*/
File[]subs=dir.listFiles(
(pathname)->pathname.getName().startsWith(".")
);
System.out.println("获取的子项个数:"+subs.length);
for (int i = 0; i < subs.length; i++) {
System.out.println(subs[i].getName());
}
}
}
}
//class MyFilter implements FileFilter{
// /**
// * 该方法的作用就是定义文件的过滤规则,只要参数传入的file符合要求
// * 则方法返回值应当为true,否则为false
// */
//
//
// @Override
// public boolean accept(File file) {
// String name = file.getName();
// return name.startsWith(".");
// }
//
//}