在java.io包下,File类是唯一与文件本身操作:如删除文件、创建文件、取得文件信息有关的程序类。
1. File类的实例化对象
实例化File类对象主要用到两个构造方法:
(1)根据绝对路径实例化File类对象:
public File(String pathname)
(2)根据父路径和子路径实例化File类对象:
public File(String parent, String child)
在对任何文件进行删除、创建、取得文件信息操作前,均需要先实例化File类对象,该对象表示要操作的文件。
2. 创建新文件
public boolean createNewFile() throws IOException
通过实例化File类对象调用createNewFile()方法从而创建指定路径的文件,代码演示如下:
package www.bit.java.test;
import java.io.File;
public class Test {
public static void main(String[] args) {
//定义要操作的文件路径
File file=new File("C:\\Users\\Administrator\\Desktop\\Test.txt");
try {
//创建新文件
file.createNewFile();
} catch (Exception e) {
e.printStackTrace();
}
}
}
运行结果为:在指定路径(如:C:\Users\Administrator\Desktop)下创建新文件Test.txt
故,创建文件的步骤为:先需要定义要操作(创建)的文件的File类对象,再通过该File类对象去操作(创建)该文件。
3. 判断文件是否存在
public boolean exists()
该方法用于判断File类对象对应的文件是否存在?演示如下:
package www.bit.java.test;
import java.io.File;
public class Test {
public static void main(String[] args) {
// 定义要操作的文件路径
File file = new File("C:\\Users\\Administrator\\Desktop\\Test.txt");
// 判断文件Test.txt是否存在
System.out.println(file.exists());
}
}
运行结果为:true
4. 删除文件
public boolean delete()
该方法用于删除File类对象对应的文件,演示如下:
package www.bit.java.test;
import java.io.File;
public class Test {
public static void main(String[] args) {
// 定义要操作的文件路径
File file = new File("C:\\Users\\Administrator\\Desktop\\Test.txt");
// 删除文件Test.txt
//在删除文件前需要判断该文件是否存在
if(file.exists())
{
file.delete();
}
}
}
需要注意的是,在删除前最好判断该文件是否存在,这样使得程序更加符合逻辑,但不判定也不会出现任何异常!
以上实现了文件的简单处理操作,但是代码存在一个问题:
关于路径的格式问题。在Windows下的路径为:C:\Users\Administrator\Desktop\Test.txt,而在Linux下的路径为:C:/Users/Administrator/Desktop/Test.txt。这就有可能出现实际项目部署环境与开发环境不同的问题,所以在使用路径分隔符上一般采用File类的一个常量: public static final String separator 来描述。故使用该常量表示路径的分隔符,代码演示如下:
package www.bit.java.test;
import java.io.File;
import java.io.IOException;
public class Test {
public static void main(String[] args) {
// 定义要操作的文件路径,使用File类的常量separator
File file = new File("C:"+File.separator+"Users"+File.separator
+"Administrator"+File.separator+"Desktop"+File.separator+"Test.txt");
try {
file.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
}
}
5. 关于目录的操作
(1)取得父路径
public String getParent()
(2)取得父路径的File类对象
public File getParentFile()
(3)创建目录(无论有多少级目录都会创建,都会创建)
public boolean mkdirs()
对以上三个方法进行代码演示:
package www.bit.java.test;
import java.io.File;
import java.io.IOException;
public class Test {
public static void main(String[] args) throws IOException {
// 定义要操作的文件路径,使用File类的常量separator
File file = new File("C:"+File.separator+"Users"+File.separator+"Administrator"
+File.separator+"Desktop"+File.separator+"Test"+File.separator+"MyFile.txt");
//获取父路径
System.out.println(file.getParent());
//获取父路径的File类对象
File parentFile=file.getParentFile();
file.mkdirs();
}
}
运行结果为:C:\Users\Administrator\Desktop\Test,因为C:\Users\Administrator\Desktop\Test\MyFile.txt的父路径就是它,并且取得了其父路径的File类对象。在运行结束后,在桌面上创建了Test文件夹以及在其文件夹内也创建了MyFile.txt文件夹。故需要注意,当不想要MyFile.txt也创建为文件夹,就需要在其父路径的File类对象上调用mkdirs()方法,之后再调用createNewFile()方法去创建文件。故,将上述代码修改如下:
package www.bit.java.test;
import java.io.File;
import java.io.IOException;
public class Test {
public static void main(String[] args) throws IOException {
// 定义要操作的文件路径,使用File类的常量separator
File file = new File("C:"+File.separator+"Users"+File.separator+"Administrator"
+File.separator+"Desktop"+File.separator+"Test"+File.separator+"MyFile.txt");
//获取父路径
System.out.println(file.getParent());
//获取父路径的File类对象
File parentFile=file.getParentFile();
//先创建其父路径为目录
parentFile.mkdirs();
//再创建具体文件
file.createNewFile();
}
}
6. 取得文件信息
(1)判断路径是否为文件
public boolean isFile()
(2)判断路径是否为目录
public boolean isDirectory()
(3)取得文件大小(单位为字节)
public long length()
(4)最后一次修改文件日期
public long lastModified()
调用以上方法进行代码演示:
package www.bit.java.test;
import java.io.File;
import java.io.IOException;
public class Test {
public static void main(String[] args) throws IOException {
// 定义要操作的文件路径,使用File类的常量separator
File file = new File("C:"+File.separator+"Users"+File.separator+"Administrator"
+File.separator+"Desktop"+File.separator+"Test"+File.separator+"MyFile.txt");
//调用isDirectory()方法
System.out.println("判断是否为目录:"+file.isDirectory());
//调用exists()方法以及isFile()方法
if(file.exists()&&file.isFile())
{
//调用length()方法
System.out.println("文件大小:"+file.length());
//调用lastModified()方法
System.out.println("最后修改日期:"+file.lastModified());
}
}
}
运行结果如下:
判断是否为目录:false
文件大小:43
最后修改日期:1526998596614
此时你会发现,日期打印的是一串数字,根本无法判断具体是什么日期,这是需要用到Date类以及关于日期格式的SimpleDateFormat类,添加代码如下:
SimpleDateFormat format=new SimpleDateFormat("yy年MM月dd日 HH:mm:ss");
Date date=new Date(file.lastModified());
String msg=format.format(date);
System.out.println("日期:"+msg);
运行结果如下:
日期:18年05月22日 22:16:36
7. 列出目录中的全部组成
public File[] listFiles()
代码演示如下所示:
package www.bit.java.test;
import java.io.File;
public class Test {
public static void main(String[] args){
// 定义要操作的文件路径,使用File类的常量separator
File file = new File("C:"+File.separator+"Users"+File.separator+"Administrator"+File.separator+"Desktop");
//在列出当前目录的所有组成前,先判断当前目录是否存在
if(file.exists()&&file.isDirectory())
{
//列出目录中的全部内容
File[] result=file.listFiles();
for (File file2 : result) {
System.out.println(file2);
}
}
}
}
运行结果为Destop目录下的全部组成,如下所示:
C:\Users\Administrator\Desktop\desktop.ini
C:\Users\Administrator\Desktop\eclipse.lnk
C:\Users\Administrator\Desktop\Internet Explorer.lnk
C:\Users\Administrator\Desktop\lingo11
C:\Users\Administrator\Desktop\matlab.lnk
C:\Users\Administrator\Desktop\SQL Server Management Studio.lnk
C:\Users\Administrator\Desktop\stats.lnk
C:\Users\Administrator\Desktop\sublime_text.lnk
C:\Users\Administrator\Desktop\Test