目录
Java 中通过
java.io.File
类来对一个文件(包括目录)进行抽象的描述。注意,有 File 对象,并不代表真实存在该文件。
1. File 常用构造方法
我们先来看看 File类中的常见构造方法和常见用法。
代码示例如下:
import java.io.File;
public class FileDemo1 {
public static void main(String[] args) {
File pFile=new File("d:\\");
//构造方法1
File file=new File(pFile,"a.txt");
System.out.println("文件1路径:"+file.getPath());
//构造方法2【重点】
File file2=new File("d:\\b.txt");
System.out.println("文件2路径:"+file2.getPath());
//构造方法3
File file3=new File("d:\\","c.txt");
System.out.println("文件3路径:"+file3.getPath());
}
}
构造方法2是最重要的,经常使用。
2 常用方法
示例1:观察 get 系列的特点和差异
import java.io.File;
import java.io.IOException;
public class FileDemo2 {
public static void main(String[] args) throws IOException {
File file=new File(".../a.txt");
System.out.println("文件名称:"+file.getName());
System.out.println("文件相对路径(getPath):"+file.getPath());
System.out.println("文件绝对路径:"+file.getAbsolutePath());
System.out.println("文件标准路径:"+file.getCanonicalPath());
}
}
getPath() VS getAbsolutePath() VS getCanonicalPath()
♥绝对路径时,三者一致。
♥相对路径时:
❣getPath() 是相对路径本身;
❣getAbsolutePath() 是项目目录 + 相对路径本身;
❣getCanonicalPath() 可以解析相对路径,得到争取的路径。
示例2:文件判断与创建
import java.io.File;
import java.io.IOException;
public class FileDemo3 {
public static void main(String[] args) throws IOException {
File file=new File("a.txt");
System.out.println("文件是否存在"+file.exists());
System.out.println("是否为文件夹"+file.isDirectory());
System.out.println("是否为文件"+file.isFile());
System.out.println();
boolean result=file.createNewFile();//创建文件
System.out.println("文件创建:"+result);
System.out.println("文件是否存在"+file.exists());
System.out.println("是否为文件夹"+file.isDirectory());
System.out.println("是否为文件"+file.isFile());
File file2=new File("b.txt");
if(!file2.exists()){//文件不存在,可以创建文件
System.out.println("创建文件:"+file2.createNewFile());
}
System.out.println("是否为文件夹:"+file2.isDirectory());
System.out.println("是否为文件:"+file2.isFile());
}
}
示例3:文件存在删除/不存在创建
import java.io.File;
import java.io.IOException;
public class FileDemo4 {
public static void main(String[] args) throws IOException {
//先得到一个file对象
File file=new File("a.txt");
//判断file对象是否存在
if(file.exists()){
//如果存在则删除对象
boolean result=file.delete();
System.out.println("文件删除:"+result);
}else{
//如果不存在则创建对象
boolean result =file.createNewFile();
System.out.println("新建文件:"+result);
}
}
}
示例4:观察 deleteOnExit
import java.io.File;
import java.io.IOException;
public class FileDemo5 {
public static void main(String[] args) throws IOException, InterruptedException {
File file=new File("a.txt");
if(!file.exists()){
//如果不存在,则新建
System.out.println("新建文件:"+file.createNewFile());
}
System.out.println("开始删除文件");
//删除文件
file.deleteOnExit();
Thread.sleep(5*1000);
}
}
注意:程序运行结束后,文件被删除,但如果是人为退出程序,文件不会被删除。
程序发生异常退出,文件不会被删除。
示例5:观察目录的创建
import java.io.File;
public class FileDemo6 {
public static void main(String[] args) {
File file=new File(("mytest"));
System.out.println("是否为文件夹:"+file.isDirectory());
System.out.println("是否为文件:"+file.isFile());
System.out.println();
boolean result=file.mkdir();
System.out.println("创建文件夹:"+result);
System.out.println("是否为文件夹:"+file.isDirectory());
System.out.println("是否为文件:"+file.isFile());
}
}
运行结果:
mkdir
只能创建一级目录
创建二级目录:
import java.io.File;
public class FileDemo6 {
public static void main(String[] args) {
File file=new File(("mytest/apps"));
System.out.println("是否为文件夹:"+file.isDirectory());
System.out.println("是否为文件:"+file.isFile());
System.out.println();
//boolean result=file.mkdir();//创建一个文件夹
boolean result=file.mkdirs();//创建多级文件夹
System.out.println("创建文件夹:"+result);
System.out.println("是否为文件夹:"+file.isDirectory());
System.out.println("是否为文件:"+file.isFile());
}
}
运行结果:
示例6:观察文件重命名
import java.io.File;
import java.io.IOException;
public class FileDemo7 {
public static void main(String[] args) throws IOException {
//将a.txt重命名为b.txt
File file=new File("a.txt");
File tarfile =new File("b.txt");
if(!file.isFile()){
//先创建文件
file.createNewFile();
}
//重命名文件
boolean result=file.renameTo(tarfile);
System.out.println("重命名结果:"+result);
}
}
第一次运行结果:
第二次运行结果:
执行两次观察结果可知:如果文件不存在,那么可以重命名成功,反之则不成功。