文章目录
前言
在JAVA的I/O技术中File类是不可缺少的一部分,也是学习I/O技术的第一步。
一、File类是什么?
File类是java.io包中唯一代表磁盘文件本身的对象。File类还定义了一些与平台无关的方法来操作文件,可以调用File类中的方法,实现创建、删除、重命名文件等操作。File类的对象主要用来获取文件本身的一些信息,如文件所在的目录、文件的长度、文件读写权限等。数据流可以将数据写入到文件中,文件也是数据流最常用的数据媒体。
二、File类的使用方法
在使用File类时,无论进行什么操作,都要先导入java.io包。
1.文件的相关操作
(1)文件对象的创建
通过File类创建一个文件对象。通常使用以下3种构造方法来创建文件对象:
(1)通过给定路径名字符串转换为抽象路径名来创建一个新File实例。
new File(String pathname)
//其中,pathname指路径名称(包含文件名)
实例:
File f1 = new File("D:\\HuaweiMoveData\\Users\\31463\\Desktop\\test.txt");
//创建了一个f1的File类对象,所指文件为pathname所指文件
//该File对象所指文件即为test.txt
(2) 通过定义的父路径和子路径字符串(包含文件名)创建一个新File实例。
new File(String parent,String child)
//parent:父路径字符串
//child:子路径字符串(包含文件名)
实例:
File f2 = new File("D:\\HuaweiMoveData\\Users\\31463\\Desktop","test.txt");
//D:\\HuaweiMoveData\\Users\\31463\\Desktop父路径
//test.txt子文件名
//该File对象所指文件为test.txt
(3)根据父路径对象和child路径名字符串创建一个新File实例
new File(File f,String child)
//f:父路径对象
//child:子路径字符串
实例:
File dir = new File("D:\\HuaweiMoveData\\Users\\31463\\Desktop");
File f3 = new File(dir,"test.txt");
//dir为父路径文件夹,test.txt为父路径下的一个文件
//该File类对象所指文件为test.txt
对于Windows平台,包含盘符的路径名前缀由驱动器号和一个“:”组成。如果路径名是绝对路径名,还可能后跟“\\”(含转义字符)。
System.out.println(f1 == f2);
//f1、f2、f3对象不相等,所指文件相同,但创建的对象是独立的,返回false。
System.out.println(f1.equals(f2));
//f1、f2指向相同文件,返回true。
(2)文件的创建与删除
方法 | 功能介绍 |
createNewFile() | 创建一个新的空文件。如果文件已经存在,或者创建文件的操作出现错误,则该方法会返回false。否则,如果成功创建了文件,则返回true。 |
delete() | 删除文件或目录。如果删除成功,返回true;如果删除失败,返回false。 |
当使用File类创建一个文件对象后,例如:
File file = new File("word.txt");
若当前目录下不存在名称为“word.txt”的文件,File类对象可以调用createNewFile()方法创建一个名称为“word.txt”的空文件;如果存在"word.txt"文件,可以调用delete()方法进行删除。
实例:
import java.io.*;
public class Demo{
public static void main(String[] args){
File file = new File("word.txt"); //创建文件对象
if(file.exists()){
file.delete(); //若文件存在,则将其删除
System.out.println("文件已删除");
}else{ //创建文件需要用try-catch语句捕捉可能出现的异常
try{
file.createNewFile(); //创建该文件
System.out.println("文件已创建");
}catch(IOException e){
e.printStackTrace();
}
}
}
}
输出结果:
调用createNewFile()方法创建文件,需要用try-catch语句捕捉可能出现的异常。
(3)文件信息的获取
File类提供了许多方法来获取文件本身的信息,常用方法如下:
方法 | 返回值 | 功能描述 |
getName() | String | 获取文件的名称 |
getAbsolutePath() | String | 获取文件的绝对路径 |
getParent() | String | 获取文件的父路径 |
canRead() | boolean | 判断文件是否为可读的 |
canWrite() | boolean | 判断文件是否可被写入 |
exits() | boolean | 判断文件是否存在 |
isFile() | boolean | 判断File对象是否为一个文件对象 |
isDirectory() | boolean | 判断File对象是否为一个文件夹对象 |
isHidden() | boolean | 判断文件是否为隐藏文件 |
length() | long | 获取文件的长度(以字节为单位) |
lastModified() | long | 获取文件的最后修改时间 |
以下是这些常用方法的实例:
//File类的使用 没有显示不必要的代码
//判断文件是否存在
System.out.println("判断文件是否存在:"+f3.exists());
//此File对象是否是文件
System.out.println("此File对象是否为文件:"+f3.isFile());
//输出文件名
System.out.println("文件名:"+f3.getName());
//输出文件绝对路径
System.out.println("文件的绝对路径:"+f3.getAbsolutePath());
//文件是否可读
System.out.println("文件是否可读:"+f3.canRead());
//文件是否可被写入
System.out.println("文件是否可被写入:"+f3.canWrite());
//是否为隐藏文件
System.out.println("是否为隐藏文件:"+f3.isHidden());
//文件的字节数
System.out.println("文件的字节数:"+f3.length());
//文件的最后修改时间
Date date = new Date(f3.lastModified()); //通过毫秒值创建日期对象
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
System.out.println("文件最后的修改时间:"+sdf.format(date));
运行结果:
2.文件夹的相关操作
(1)文件夹对象的创建
通过File类创建一个文件对象。通常使用以下2种构造方法来创建文件夹对象:
(1) 创建文件夹对象
new File(String Directory);
//Directory为创建的文件夹名称
实例:
File dir = new File("dir");
(2)创建多次文件夹对象
new File(String pathname);
//pathname举例:dir/dir2/dir3
实例:
File dir2 = new File("dir/dir1/dir2/dir3");
(2)文件夹的创建与删除
方法 | 功能描述 |
mkdir() | 在指定的路径上创建一个新的文件夹 |
mkdirs() | 在指定的路径下创建多个目录,如果目录已存在则不做任何操作。该方法可以确保创建的目录结构是完整的,即使其中的某些目录已存在。 |
delete() | 删除文件或目录。如果删除成功,返回true;如果删除失败,返回false。 |
以下是使用这些方法的示例:
File dir = new File("dir");
File dir2 = new File("dir/dir1/dir2/dir3");
//创建一层文件夹,并且获取是否创建成功
boolean flag = dir.mkdir();
System.out.println("创建文件夹是否成功:"+flag);
//创建多层文件夹,并且获取是否创建成功
boolean flag2 = dir2.mkdirs();
System.out.println("创建多层文件夹是否成功:"+flag2);
//删除文件路径最后一个文件夹,并获取是否删除成功
boolean del = dir2.delete();
System.out.println("删除文件夹是否成功:"+del);
输出结果:
dir2文件夹的创建,会覆盖dir创建的文件夹。删除dir2的文件夹,只会删除最里层的那个文件夹。
(3)文件夹信息的获取
方法 | 功能描述 |
listFiles() | 获取指定目录下所有文件和子目录的列表。该方法返回一个File对象数组,每个元素代表一个文件或子目录。如果指定的路径不是一个目录,或者发生I/O错误,则该方法返回null。 |
以下是此方法的示例:
想要获取到test文件夹中所有含有的文件信息:
生成一个以test文件夹为绝对路径的File对象,此对象调用listFiles()方法,保存于一个File数组中即可,然后遍历输出结果。
//D盘桌面下的test文件夹
File f = new File("D:\\HuaweiMoveData\\Users\\31463\\Desktop\\test\\");
//返回文件夹下的所有的子文件及子文件夹,组成一个数组
File files[] = f.listFiles();
//遍历Files数组对象(文件夹)
for(File tmp:files){
if(tmp.isFile()){
//判断是否为文件或文件夹
System.out.println("文件:"+tmp.getName());
}else if(tmp.isDirectory()){
System.out.println("文件夹:"+tmp.getName());
}
}
test文件中所有的文件:
运行结果:
总结
以上就是关于I/O中File类的介绍以及相关方法的使用,本文简单介绍了File类的使用,而File类是学习I/O技术的开端,欢迎读者在评论区更加深入的讨论。