java.io.File类,File用于表示文件系统中的一个文件或目录。使用File可以:
1.访问所表示的文件或目录的属性信息(名字,大小等)
2.创建,删除文件或目录
3.访问目录子项
但是不能访问数据。创建File时要指定路径,使其表示该路径下的文件或目录,这里目录通常指相对路径,虽然不能准确描述位置。但是根据运行环境而定,可以实现跨平台"./"指当前目录,在eclipse下运行java程序时当前目录的位置就是所在项目的目录。
public class FileDemo {
public static void main(String[] args) {
File file=new File("./demo.txt");
System.out.println(file.getName());
System.out.println(file.length());
/**可读*/
System.out.println(file.canRead());
/**可写*/
System.out.println(file.canWrite());
/**是否隐藏*/
System.out.println(file.isHidden());
}
}
使用File创建一个新文件:
public class CreateNewFileDemo {
public static void main(String[] args) throws IOException {
/**
* 在当前目录下新建一个文件test.txt
*/
File file=new File("./test.txt");//抽象路径
//判断file文件表示的文件或目录是否真实存在
if (!file.exists()) {
//将file表示的文件创建出来
file.createNewFile();//抛出异常
System.out.println("successfully created");
}else {
System.out.println("already exist");
}
}
}
删除一个文件:
public class DeleteFileDemo {
public static void main(String[] args) {
/**
* 删除当前目录下的test.txt
* ./是默认的
*/
File file=new File("test.txt");
file.delete();
if (!file.exists()) {
System.out.println("successfully deleted");
}
}
}
创建一个目录:
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("已存在");
}
}
}
创建一个多级目录:
public class MkDirsDemo {
public static void main(String[] args) {
/**
* 在当前目录下新建./a/b/c/d/e/f
*/
File dir=new File("a/b/c/d/e/f");
if (!dir.exists()) {
/**
* mkdirs将所有不存在的父目录一同创建出来
*/
dir.mkdirs();
System.out.println("已创建");
}else {
System.out.println("已存在");
}
}
}
删除目录:
public class DeleteDirDemo {
public static void main(String[] args) {
File dir=new File("demo");
if (dir.exists()) {
//删目录的前提是必须是一个空目录
dir.delete();
System.out.println("已删除");
}else {
System.out.println("没有该目录");
}
}
}
获取一个目录的所有子项。
public class ListFilesDemo {
public static void main(String[] args) {
/**
* 获取当前目录的所有子项
*/
File dir=new File(".");
/**
* boolean isDirectory()
* 判断file表示的是一个目录
* boolean isFile()
* 判断是否是一个文件
*/
if (dir.isDirectory()) {
File[]files=dir.listFiles();
System.out.println(files.length);
for (int i = 0; i < files.length; i++) {
System.out.println(files[i].getName());
}
}
}
}
完成方法,删除指定的File表示的文件或目录。
public class Test {
public static void main(String[] args) {
File dir=new File("a");
delete(dir);
}
public static void delete(File file) {
/** 首先判断file是否是一个目录,要是目录则需要先将该目录的子项全部删除后才可以删除
目录,若是文件则可以直接删除*/
if (file.isDirectory()) {
File[]files1=file.listFiles();
for (int i = 0; i < files1.length; i++) {
/**递归调用*/
delete(files1[i]);
}
file.delete();
}
}
}
listFiles有一个重载方法,允许我们传入一个参数,该参数为一个文件过滤器,那么该方法会将目录中满足过滤器要求的子项返回。
public class ListFilesDemo2 {
public static void main(String[] args) {
File dir=new File(".");
/**
* 获取当前目录中名字以"."开头的子项
*/
//lamda表达式
File[]dirs=dir.listFiles(new FileFilter() {
public boolean accept(File pathname) {
String name=pathname.getName();
return name.startsWith(".");
}
});
/**
* 该listFiles方法会将目录中的每个子项都通过
* 调用给定的过滤器的accept方法进行判断,将返
* 回true的子项保留并以数组形式返回
*/
System.out.println(dirs.length);
}
}