java.io.File
概念
File的每一个实例用于表示一个文件或目录的
- 使用File可以:
- 1:访问文件或目录的属性
- 2:创建/删除文件或目录
- 3:访问一个目录中的所有子项
- 但是File不能:访问文件数据
File的创建
构造器
-
File(String pathName)
根据给定的路径创建File对象来表示。
-
File(File parent,String pathName)
表示parent表示的目录中指定的路径下对应的文件或目录
其中parent表达的应当是一个目录
绝对路径与相对路径
- 绝对路径:从系统定义的根目录开始,优点:清晰明了 缺点:不利于跨平台
- “./”:当前目录,不同的运行环境定位不同。在IDEA中执行java程序时"./"表示当前项目目录
- 在相对路径中"./“是可以忽略不写的,默认就是从”./"开始
- 类加载路径,后期使用很多的相对路径。在后面学习项目阶段的课程中会介绍到
- “./”:当前目录,不同的运行环境定位不同。在IDEA中执行java程序时"./"表示当前项目目录
- 相对路径:从运行环境定义的路径开始,优点:跨平台 缺点:路径定义模糊,需要视环境而定
例
package file;
import java.io.File;
public class FileDemo {
public static void main(String[] args) {
/*
创建File对象用来表示当前项目目录下的demo.txt文件
参数:文件的路径
路径分为两种:
绝对路径:从系统定义的根目录开始,优点:清晰明了 缺点:不利于跨平台
相对路径:从运行环境定义的路径开始,优点:跨平台 缺点:路径定义模糊,需要视环境而定
*/
// File file = new File("C:/Users/TEACHER/IdeaProjects/JSD2303_SE/demo.txt");
/*
当前程序是在IDEA中运行的,因此IDEA就是当前程序的运行环境
相对路径就是根据不同的运行环境而定。
"./":称为"当前目录",在IDEA中当前目录指的是当前项目目录
*/
File file = new File("./demo.txt");
}
}
访问属性的相关方法
-
String getName()
返回当前File对象表示的文件或目录的名字
-
long length()
返回当前File对象表示的文件的长度,单位是字节
-
boolean canRead()
返回当前File对象表示的文件或目录是否可读
-
boolean canWrite()
返回当前File对象表示的文件或目录是否可写
-
boolean isHidden()
返回当前File对象表示的文件或目录是否被隐藏
-
boolean exists()
判断当前File对象表示的文件或目录是否已经存在
例
先手动在IDEA的当前项目目录下新建一个名为demo.txt的文件,并在文件中随意的输入些文字
具体操作:
-
IDEA菜单中File->New->File
-
在弹出框中输入demo.txt
-
双击打开这个文件随意输入些文字
package file;
import java.io.File;
public class FileDemo {
public static void main(String[] args) {
File file = new File("./demo.txt");
//获取名字
String name = file.getName();
System.out.println(name);
//获取File表示的文件的长度(单位是字节)
long len = file.length();
System.out.println("占用的字节数:"+len);
//是否可读
boolean cr = file.canRead();
//是否可写
boolean cw = file.canWrite();
//是否是被隐藏
boolean ih = file.isHidden();
System.out.println("可读:"+cr);
System.out.println("可写:"+cw);
System.out.println("是否隐藏:"+ih);
}
}
创建与删除文件
文件的创建
方法
boolean createNewFile()
在当前File表示的路径下将文件创建出来。
如果指定的文件不存在并成功地创建,则返回true;如果指定的文件已经存在,则返回 false
例
package file;
import java.io.File;
import java.io.IOException;
/**
* 使用File对象新建一个文件
*/
public class CreateNewFileDemo {
public static void main(String[] args) throws IOException {
/*
在当前项目目录下新建一个名为:test.txt的文件
*/
//1创建一个File对象来表示该路径
File file = new File("./test.txt");
//2创建这个文件 返回true:文件被创建 false:文件已经存在无法再创建
boolean success = file.createNewFile();
if(success){
System.out.println("创建成功");
}else{
System.out.println("该文件已存在");
}
}
}
练习
在当前项目目录下新建100个文件,名字为test1.txt–test100.txt
package file;
import java.io.File;
import java.io.IOException;
/**
* 在当前项目目录下新建100个文件
* 名字为test1.txt--test100.txt
*
* 提示:
* 1:使用for循环,循环变量控制在1-100
* 2:可以将循环变量拼接起来形成文件名
* 3:使用File对象表示这个文件名并将它创建出来
*/
public class Test1 {
public static void main(String[] args) throws IOException {
for(int i=1;i<=100;i++){
File file = new File("./test"+i+".txt");
file.createNewFile();
}
System.out.println("创建完毕!");
}
}
文件的删除
方法
boolean delete()
删除当前File对象表示的文件。
当且仅当成功删除文件或目录时,返回true;否则返回false
例
package file;
import java.io.File;
/**
* 删除一个文件
*/
public class DeleteFileDemo {
public static void main(String[] args) {
/*
将当前项目目录下的test.txt文件删除
*/
//1创建File对象表示要删除的文件
//在相对路径中"./"是可以忽略不写的,默认就是从"./"开始
// File file = new File("./test.txt");
File file = new File("test.txt");
file.delete();
System.out.println("文件已删除");
}
}
练习
删除当前项目目录下100个文件,test1.txt–test100.txt
package file;
import java.io.File;
/**
* 删除当前项目目录下100个文件
* test1.txt--test100.txt
*/
public class Test2 {
public static void main(String[] args) {
for(int i=1;i<=100;i++){
File file = new File("./test"+i+".txt");
file.delete();
}
System.out.println("创建完毕!");
}
}
创建与删除目录
目录的创建
方法
boolean mkdir()
将当前File表示的目录创建出来。该方法要求当前File表示的目录所在的父目录必须存在,否则创建失败
当且仅当已创建目录时,返回 true;否则返回 false
例
package file;
import java.io.File;
/**
* 创建一个目录
*/
public class MkDirDemo {
public static void main(String[] args) {
//在当前项目目录下新建一个名为:demo的目录
File dir = new File("demo");
/*
boolean exists()
判断当前File对象表示的文件或目录是否已经存在,如果已经存在则返回true
boolean mkdir()
将当前File对象表示的目录创建出来,当且仅当目录成功创建时返回true
*/
if(!dir.exists()) {
dir.mkdir();
System.out.println("该目录已创建");
}else{
System.out.println("该目录已存在");
}
}
}
创建多级目录
方法
boolean mkdirs()
创建当前File对象表示的目录,并且会自动创建所有不存在的父目录
当且仅当已创建目录以及所有必需的父目录时,返回true;否则返回 false
实际开发中推荐用该方法创建目录
例
package file;
import java.io.File;
/**
* 创建多级目录
*/
public class MkDirsDemo {
public static void main(String[] args) {
/*
在当前目录下新建:a/b/c/d/e/f目录
*/
//当前dir表达式的是f目录,只不过f是在前面对应的里面
File dir = new File("a/b/c/d/e/f");
if(dir.exists()){
System.out.println("该目录已存在!");
}else{
/*
创建失败
原因:mkdir()方法在创建目录时要求该目录所在的父目录必须真实存在
否则创建失败
*/
// dir.mkdir();
/*
mkdirs()方法在创建目录时会自动将不存在的父目录一同创建出来
实际开发中推荐用这个方法创建目录
*/
dir.mkdirs();
System.out.println("该目录已创建!");
}
}
}
目录的删除
方法
boolean delete()
与删除文件是同一个方法,如果File表示的是目录也可以被删除
删除目录时要求该目录必须是一个空目录,否则删除失败
例
package file;
import java.io.File;
/**
* 删除目录
*/
public class DeleteDirDemo {
public static void main(String[] args) {
//将当前项目目录下的demo目录删除
//File dir = new File("./demo");
File dir = new File("./a");//删除失败,因为a不是一个空目录
if(dir.exists()){
dir.delete();
System.out.println("该目录已删除");
}else{
System.out.println("该目录不存在");
}
}
}
访问目录内容
访问一个目录中的所有子项
方法
FIle[] listFiles()
获取当前File对象表示的目录中的所有子项。返回的数组中每个FIle对象表示该目录中的一个子项。
相关方法
boolean isFile()
判断当前File对象表达的是否为一个真实存在的文件
boolean isDirectory()
判断当前File对象表达的是否为一个真实存在的目录
例
package file;
import java.io.File;
/**
* 获取一个目录中的所有子项
*/
public class ListFilesDemo {
public static void main(String[] args) {
//将当前目录中的所有子项列出
//1创建File对象表示当前目录
File dir = new File(".");
if(dir.isDirectory()) {//存在且确实为一个目录
//2列出该目录中的所有子项
File[] subs = dir.listFiles();
System.out.println("一共有"+subs.length+"个子项");
//遍历数组,获取每一个子项
for(File sub : subs){
String name = sub.getName();//获取该File对象表示的文件或目录的名字
System.out.println(name);
}
}
}
}
练习
定义一个过滤器,获取当前目录下子项名字中含有字母"a"的所有子项
package file;
import java.io.File;
import java.io.FileFilter;
/**
* 定义一个过滤器,获取当前目录下子项名字中含有字母"a"的所有子项
*
* indexOf("a")是否>=0,因为当字符串不含有"a"时indexOf返回值为-1
*
* String提供了直接判断是否包含指定内容的方法
* boolean contains(String str)
* 当前字符串包含参数str表示的字符串内容时则返回true
*/
public class Test3 {
public static void main(String[] args) {
File dir = new File(".");
if(dir.isDirectory()){
// FileFilter filter = new FileFilter() {
// public boolean accept(File f) {
// return f.getName().contains("a");
// }
// };
// File[] subs = dir.listFiles(filter);
/*
FileFilter接口只有一个抽象方法
因此可以使用lambda表达式创建
*/
File[] subs = dir.listFiles(f->f.getName().contains("a"));
for(File sub : subs){
System.out.println(sub.getName());
}
}
}
}