File类:
Java.io.File类
文件和目录路径的抽象表示形式
Java把电脑中的文件和和文件夹(目录)封装成一个File类,我们可以使用File类对文件和文件夹进行操作
我们可以使用File类对方法,创建、删除、获取、判断是否存在、遍历文件及文件夹,获取文件的大小
File类是一个与系统无关的类,任何的操作系统都可以使用这个类中的方法
记住三个重点词:
file :文件
Directory :文件夹/目录
Path :路径
路径:
绝对路径:是一个完整的路径,从盘符开始
相对路径:只写当前项目名,省略项目的根目录
注意:
1.路径不区分大小写
2.路径中的文件名称分隔符使用本系统的
3.反斜杠是转义字符,两个反斜杠代表一个普通的反斜杠
·获取分隔符符号(不同系统不一样)
import java.io.File;
public class File7 {
public static void main(String[]args) {
String pathSeparator = File.pathSeparator;
System.out.println(pathSeparator);//: 路径分隔符
//Windows是;Linux是:Mac是:
String separator = File.pathSeparator;
System.out.println(separator);//: 文件名称分隔符
//Windows是/ Linux是\ Mac是:
}
}
file类的构造方法
import java.io.File;
ublic class File8 {
public static void main(String[]args) {
show1();
show2("c://","a.txt");
show3();
}
private static void show3() {
File parent = new File("D:");
File file = new File(parent,"hello.java");
System.out.println(file);// D:/hello.java
}
private static void show2(String parent,String child) {
File f3 = new File(parent,child);
System.out.println(f3);
}
private static void show1() {
File f1 = new File("/Users/a/Desktop/图片练习");
System.out.println(f1);//重写了Object类的toString方法 // /Users/a/Desktop/图片练习
File f2 = new File("/Users/a/Desktop");
System.out.println(f2);//重写了Object类的toString方法 // /Users/a/Desktop
File f3 = new File("/图片练习");
System.out.println(f3);//重写了Object类的toString方法 // /Users/a/Desktop/图片练习
}
}
1. show1()使用的是 File(String pathname) 方法
通过给定路径名称字符串转换成抽象路径名称来创建一个新的File实例
参数 :String pathname
是字符串的路径名称
路径可以以文件或者文件夹结尾
路径可以是相对路径也可以是绝对路径
路径可以存在,也可以不存在
!创建File对象,只是把路径封装成File对象,不考虑路径的真假情况
2. show2()使用的是 File(String parent,String child) 方法
根据parent路径名称字符串和child路径名称字符串创建一个新的file实例
参数:parent 父路径
child 子路径
好处:把路径分成类两部分,使用灵活,便于修改。
3.show3()使用的是 File(File parent,String child) 方法
根据parent抽象路径名和child字符串路径名创建一个新file实例
参数:parent 父路径
child 子路径
好处:把路径分成类两部分,使用灵活,便于修改。
查看文件的相关信息
import java.io.File;
public class File1 {
public static void main(String[]args) {
//创建File文件对象
File file = new File("example.txt");
System.out.println("文件名称:"+file.getName());
System.out.println("文件的相对路径:"+file.getPath());
System.out.println("文件的绝对路径:"+file.getAbsolutePath());
System.out.println("文件的父路径:"+file.getParent());
System.out.println(file.canRead()?"文件可读":"文件不可读");
System.out.println(file.canWrite()?"文件可写":"文件不可写");
System.out.println(file.isFile()?"是一个文件":"不是一个文件");
System.out.println(file.isDirectory()?"是一个目录":"不是一个目录");
System.out.println(file.isAbsolute()?"是绝对路径":"不是绝对路径");
System.out.println("最后的修改时间为:"+file.lastModified());
System.out.println("文件大小为:"+file.length());
System.out.println("是否成功删除文件?"+file.delete());
}
}
结果:
文件名称:example.txt
文件的相对路径:example.txt
文件的绝对路径:/Users/a/Desktop/Java/Example/example.txt
文件的父路径:null
文件可读
文件可写
是一个文件
不是一个目录
不是绝对路径
最后的修改时间为:1557913240802
文件大小为:4
是否成功删除文件?true
遍历目录下的文件
import java.io.File;
import java.util.Arrays;
public class File2 {
public static void main(String[]args) {
//创建File对象,并指定文件路径
File file = new File("/Users/a/Desktop/Java/Example/source");
//判断是否是目录
if(file.isDirectory()) {
//获取目录中的所有文件的名称
String[] fileNames = file.list();
//对指定路径下的文件或目录进行遍历
Arrays.stream(fileNames).forEach(f->System.out.println(f));
}
}
}
结果:
.DS_Store
src.JPG
筛选遍历指定目录下所有拓展名为”.txt“的文件
import java.io.File;
import java.util.Arrays;
public class File3 {
public static void main(String[]args) {
//创建file对象并指定文件路径
File file = new File("/Users/a/Desktop/Java/Example");
//判断是否为目录
if(file.isDirectory()) {
//使用Lamda表达式过滤目录中所有以“.txt”结尾的文件的名称
String[] fileNames =file.list((dir,name)->name.endsWith(".txt"));
//对指定路径下的文件或目录进行遍历
Arrays.stream(fileNames).forEach(f->System.out.println(f));
}
}
}
结果:
out.txt
reader.txt
writer.txt
time.txt
test.txt
有子目录需要遍历,使用递归
import java.io.File;
public class File4 {
public static void main(String[]args) {
//创建file对象并指定文件路径
File file = new File("/Users/a/Desktop/Java/Example");
//调用fileDir()方法,遍历目录
fileDir(file);
}
private static void fileDir(File file) {
//获得目录下的全部文件并赋给数组
File[] listFiles = file.listFiles();
//循环遍历数组
for(File files:listFiles) {
//如果遍历的是目录,则递归调用fileDir()方法
if(files.isDirectory()) {
fileDir(file);
}
//输出文件路径
System.out.println(files);
}
}
}
结果:
/Users/a/Desktop/Java/Example/.DS_Store
/Users/a/Desktop/Java/Example/reader.txt
/Users/a/Desktop/Java/Example/out.tx
使用delect()方法删除指定目录下的文件和文件夹
import java.io.File;
public class File5 {
public static void main(String[]args) {
//创建file对象并指定文件路径
File files = new File("/Users/a/Desktop/Java/Example/source");
//调用删除方法
delectDir(files);
}
//删除方法
public static void delectDir(File files) {
//获得目录下的全部文件并赋给数组
File[] listFiles = files.listFiles();
//循环遍历数组
for(File file:listFiles) {
//如果是目录文件,则递归调用删除方法
if(files.isDirectory()) {
delectDir(file);
}
//如果是文件,则删除
file.delete();
}
//删除文件夹内所有文件后,再删除文件
files.delete();
}
}
- 注意:在Java中删除目录的操作是通过Java虚拟机直接删除而是不走回收站的,文件一旦删除就无法恢复, 因此在进行删除操作时需格外小心。
使用RandomAccessFile类来模拟记录软件测试使用的次数
import java.io.RandomAccessFile;
public class Flie6 {
public static void main(String[]args)throws Exception{
//创建RandomAccessFile对象,并以读写模式打开time.txt文件
RandomAccessFile raf = new RandomAccessFile("time.txt","rw");
//读取还可以使用的次数,第一次读取时times为5
int times = Integer.parseInt(raf.readLine())-1;
//判断剩余次数
if(times>0) {
//执行一次少一次
System.out.println("您还可以试用"+times+"次!");
//将记录指针重新指向文件开头
raf.seek(0);
//将剩余次数再次写入文件
raf.write((times+"").getBytes());
}else {
System.out.println("试用次数已经用完!");
}
//关闭这个随机存取文件流并释放任何系统
raf.close();
}
}