在 java.io 包之中,用 File 类来对文件进行操作(创建、删除、取得信息等)
1 File类使用
java.io.File 类是一个普通的类,如果要实例化对象,则常用到两个构造方法
方法 | 解释 |
---|---|
public File(String pathname) | 创建指定路径文件对象 |
public File(String parent, String child) | 同上,但可指明父路径和子路径 |
为了方便表述,我们先做两方面准备:1. 创建 FileDemo.java , 方便测试, 2. 指定并创建文件测试 路径为 E:\java_code\file
String path = "E:\\java_code\\file\\";
String name = "demo.txt";
String pathname = path + name;
2 File类常用方法-基本文件操作
方法 | 说明 |
---|---|
public boolean exists() | 测试指定路径中文件或者目录是否 存在 |
public boolean isDirectory() | 判定一个文件是目录 |
public boolean isFile() | 判定是否是文件 |
public boolean delete() | 删除文件 |
public boolean createNewFile() throws IOException | 创建一个新文件 |
- 检测文件是否存在
File file = new File(pathname);
boolean res = file.exists();
System.out.println("文件" + pathname + "是否存在: " + res);
结果
文件E:\java_code\file\demo.txt是否存在: true
- 检测是否是目录,是否是文件,删除
import java.io.File;
public class FileDemo {
public static void main(String[] args){
String path = "E:\\java_code\\file\\";
String name = "demo.txt";
String pathname = path + name;
File file = new File(pathname);
boolean res = file.exists();
System.out.println("文件" + pathname + "是否存在: " + res);
res = file.isDirectory();
System.out.println("文件" + pathname + "是否是目录: " + res);
res = file.isFile();
System.out.println("文件" + pathname + "是否是文件: " + res);
file.delete();
if(!file.exists()){
System.out.println("删除文件成功!");
}else{
System.out.println("删除文件失败!");
}
}
}
结果:
文件E:\java_code\file\demo.txt是否存在: true
文件E:\java_code\file\demo.txt是否是目录: false
文件E:\java_code\file\demo.txt是否是文件: true
删除文件成功!
- 编写文件的基本操作(如果文件不存在则进行创建;存在则删除)
import java.io.File;
import java.io.IOException;
public class FileDemo {
public static void main(String[] args) throws IOException {
String path = "E:\\java_code\\file\\";
String new_name = "demo.txt";
String pathname = path + new_name;
File file = new File(pathname);
if(file.exists()){
//文件存在,删除
file.delete();
System.out.println("文件" + pathname + "存在,删除之"); }else{
//文件不存在,创建
try {
file.createNewFile(); //有创建失败的风险,需要捕捉异常
System.out.println("文件" + pathname + "不存在,创建之");
}catch (IOException e){ //文件部分异常,常见为IOException
System.out.println("文件" + pathname + "创建失败");
e.printStackTrace();
}
}
}
}
路径分隔符是一个很重要的问题。 windows 下使用的是 \ ,而 Unix/Linux 系统下使用的是 / 。
3 File类常用方法-目录操作
方法 | 解释 |
---|---|
public boolean mkdir() | 创建一个空目录 |
public boolean mkdirs() | 创建目录(无论有多少级父目录,都会创建) |
public String getParent() | 取得父路径 |
public File getParentFile() | 取得父File对象 |
- 创建指定一个或者多个目录的路径
import java.io.File;
import java.io.IOException;
public class FileDemo {
public static void main(String[] args) throws IOException {
String path = "E:\\java_code\\file\\";
String dir_name = "demo_dir"; //想要创建的目录
//String dir_name = "demo_dir\\dir1\\dir2\\dir3"; //想要创建的目录路径
String pathname = path + dir_name;
File file = new File(pathname);
if(!file.exists()){
file.mkdir(); //创建一个空目录
//file.mkdirs(); //创建一个可能具有多个目录的路径
}else{
System.out.println("路径已经存在,不需创建");
}
}
}
结果: E:\java_code\file 路径下,观察路径变化
- 获取父路径
File file = new File(pathname);
System.out.println(file.getParent());
- 获取父目录 File 对象,并在父目录下,创建文件 demo.java
import java.io.File;
import java.io.IOException;
public class FileDemo {
public static void main(String[] args) throws IOException {
String path = "E:\\java_code\\file\\";
String dir_name = "demo_dir\\dir1\\dir2\\demo.java";
String pathname = path + dir_name;
File file = new File(pathname);
File pfile = file.getParentFile(); //获取父目录File对象
if(!pfile.exists()){//检测路径是否存在,不存在创建
pfile.mkdirs();
//获取File对象的绝对路径,后面学,这个先用起来
System.out.println("路径" + pfile.getAbsolutePath() + "不存在,创建");
}
if(!file.exists()){
file.createNewFile();
}
}
}
结果
路径E:\java_code\file\demo_dir\dir1\dir2不存在,创建
4 File类常用方法-文件属性操作
方法 | 解释 |
---|---|
public long length() | 取得文件大小(字节) |
public long lastModified() | 最后一次修改日期 |
import java.io.File;
import java.io.IOException;
import java.util.Date;
public class FileDemo {
public static void main(String[] args) throws IOException {
String path = "E:\\java_code\\file\\";
String name = "demo.txt";//可以替换成你想检测的文件
String pathname = path + name;
File file = new File(pathname);
if(!file.exists()){
file.createNewFile();
}
System.out.println("文件 " + name + "size : " + file.length());
//Date类我们后面学
System.out.println("文件 " + name + "近修改时间: " + new Date(file.lastModified()));
}
}
结果:
文件 demo.txtsize : 3
文件 demo.txt近修改时间: Sun Feb 11 15:50:47 CST 2020
5 绝对路径与相对路径
绝对路径:
是指目录下的绝对位置,直接到达目标位置,通常是从盘符开始的路径。完整的描述文件位置的路径就是绝对路径 。如: E:\javacode\Java8\Test.java 。通常:http://www.sun.com/index.htm也 代表了一个URL绝对路径。
当时目录:
这个参数还可以使用一些常用的路径表示方法,例如 ”.” 或 ”./” 代表当前目录,这个目录也就是 jvm 启动 路径 .所以如下代码能得到当前 .java
文件的当前目录的完整路径:(注意:这个目录也是当前 idea 中的 JVM 的启动路径,我们可以修改这个路径:在 Run->edit Configurations->Working directory
可以看到)
File f = new File(".");
String absolutePath = f.getAbsolutePath();
System.out.println(absolutePath);
E:\\javacode\Java8\. 注意这个点号。
**相对路径: **
相对与某个基准目录的路径 。使用相对路径可以为我们带来非常多的便利 。如当前路径为 E:\javacode ,要描述上述路径( E:\javacode\Java8\Test.java ),只需输 入: Java8\Test.java 。此时的路径是相对 E:\javacode 来说的。
我们可以使用相对路径来创建文件,例如:
File file = new File("a.txt");
File.createNewFile();
此时生成的文件就在你当前目录下面。假设当前的路径为: E:\javacode\Java8
6 File类常用方法-其他操作
方法 | 解释 |
---|---|
public File[] listFiles() | 列出一个目录指定的全部组成 |
import java.io.File;
import java.io.IOException;
import java.util.Date;
public class FileDemo {
public static void main(String[] args) throws IOException {
// 要操作的文件
File file = new File("C:\\Users\\whb\\Desktop");
// 保证是个目录且存在
if (file.exists() && file.isDirectory()) {
// 列出目录中的全部内容
File[] result = file.listFiles();
for (File file2 : result) {
System.out.println(file2);
}
}
}
}