目录
送给自己的一句话:学习编程,最重要的就是实践(有输入也要有输出)
送给自己的一句话:学习编程,最重要的就是实践(有输入也要有输出)
1.File类简介
- java.io.File类:文件和文件目录路径的抽象表示形式,与平台无关;
- File对象能新建、删除、重命名文件和目录,但 File 不能访问文件内容本身。 如果需要访问文件内容本身,则需要使用输入/输出流;
- 想要在Java程序中表示一个真实存在的文件或目录,那么必须有一个File对象,但是Java程序中的一个File对象,可能没有一个真实存在的文件或目录;
- File对象可以作为参数传递给流的构造器;
2.路径分隔符
- 路径中的每级目录之间用一个路劲分隔符隔开;
- 路劲分隔符和系统有关:
- Windows和DOS系统默认使用" \ " 来表示;
- UNIX和URL使用" / " 来表示;
- Java程序支持跨平台运行,因此路劲分隔符要慎用;
- 为了解决这个隐患,File类提供了一个常量:
- public static final String separator:根据操作系统,动态的提供分隔符;
3.File类常用构造器
public File(String pathname) | 以pathname为路劲创建File对象,可以是绝对路劲/相对路径 |
public File(String parent,String child) | 以parent为父路径,child为子路径创建File对象 |
public File (File parent,String child) | 根据一个父File对象和子文件路径创建File对象 |
知识点: 相对路径和绝对路径的区别?
- 绝对路径:是一个固定的路径,从盘符开始
- 相对路径:是相对于某个位置开始
代码示例:
public static void main(String[] args) {
//构造器1 public File(String pathname)
File file1 = new File("D:\\io流");
//构造器2 public File(String parent,String child)
File file2 = new File("D:\\io流","File");
//构造器3 public File (File parent,String child)
File file3 = new File(file1,"File");
}
4.File类常用方法
File类的获取功能: | |
public String getPath() | 获取路径 |
public String getName() | 获取名称 |
public String getParent() | 获取上级文件目录路径(若无,返回null) |
public long length() | 获取文件长度(字节数),不能获取目录长度 |
public long lastModified() | 获取最后一次修改时间,毫秒值 |
public String getAbsolutePath() | 获取绝对路径 |
public String[] list() | 获取指定目录下的所有文件或者文件目录的名称数组 |
public File[] listFiles() | 获取指定目录下的所有文件或者文件目录的File数组 |
File类的重命名功能: | |
public boolean renameTo(File dest) | 把文件重命名为指定的文件路径 |
File类的判断功能: | |
public boolean isDirectory() | 判断是否是文件目录 |
public boolean isFile() | 判断是否是文件 |
public boolean exists() | 判断是否存在 |
public boolean canRead() | 判断是否可读 |
public boolean canWrite() | 判断是否可写 |
public boolean isHidden() | 判断是否隐藏 |
File类的创建功能: | |
public boolean createNewFile() | 创建文件,若文件存在,则不创建,返回false |
public boolean mkdir() | 创建文件目录,如果此文件目录存在,就不创建; 若此文件的上层目录不存在,也不创建 |
public boolean mkdirs() | 创建文件目录,如果上层文件目录不存在,一并创建 |
注意事项:如果你创建文件或者文件目录没有写盘符路径,那么,默认在项目 路径下。 | |
File类的删除功能 | |
public boolean delete() | 删除文件或者文件夹 |
注意事项:Java中删除不走回收站,要删除一个文件目录,请注意该文件目录内不能包含文件或者文件目录! |
5.File类练习
学习完,就要实践哦,一起来检验下自己的学习成果吧!
1. 利用File构造器,new 一个文件目录file
1)在其中创建多个文件和目录
2)编写方法,实现删除file中指定文件的操作
2. 判断指定目录下是否有后缀名为.jpg的文件,如果有,就输出该文件名称
代码示例:
import org.junit.Test;
import java.io.File;
/**
* @author: wuhao
* @since: 2021/4/19 21:36
*/
public class FindJPG {
//判断指定目录下是否有后缀名为.jpg的文件,如果有,就输出该文件名称
@Test
public void Test1(){
String directory = "D:\\学习资料\\谷粒学院项目资料";
String format = "jpg";
File file = new File(directory);
findJPG(file,format);
}
//找到此目录下所有的.jpg文件
public void findJPG(File file, String format) {
int count = 0; //用于记录.jpg文件的数量
//1.获取file目录下所有的File对象
File[] files = file.listFiles();
//2.遍历File数组
for (int i = 0; i<files.length; i++){
File fileOrDir = files[i];
//3.判断是否是文件,是 比较格式
if (fileOrDir.isFile()){
String[] newString = fileOrDir.getName().split("\\.");
if (format.equals(newString[1])){
count++;
System.out.println(fileOrDir.getName());
}
}
}
if (count==0){
System.out.println("此文件目录下没有.jpg文件!");
}
}
}
3. 遍历指定目录所有文件名称,包括子文件目录中的文件。(
拓展1:并计算指定目录占用空间的大小
拓展2:删除指定文件目录及其下的所有文件
)
代码示例:
import org.junit.Test;
import java.io.File;
import java.sql.SQLOutput;
/**
* @author: wuhao
* @since: 2021/4/19 22:39
*/
public class RecursionDir {
/**
* 3. 遍历指定目录所有文件名称,包括子文件目录中的文件。(
* <p>
* 拓展1:并计算指定目录占用空间的大小
* <p>
* 拓展2:删除指定文件目录及其下的所有文件
* <p>
* )
*/
@Test
public void Test1() {
String directory = "D:\\应用软件\\CloudMusic";
File file = new File(directory);
findAllFileName(file);
Long fileDirSize = getFileDirSize();
System.out.println(file.getAbsolutePath() + "-目录大小为:" + fileDirSize + " 字节");
}
//拓展1:并计算指定目录占用空间的大小
long fileDirSize = 0;
//获取指定目录下以及子目录下的所有文件名称
private void findAllFileName(File file) {
File[] files = file.listFiles();//获取此目录下所有的文件对象
for (File file1 : files) {//遍历
if (file1.isFile()) {//判断是否是文件
System.out.println(file1.getName());
fileDirSize += file1.length();
}
if (file1.isDirectory()) {//判断是否是目录
findAllFileName(file1);//递归
}
}
}
//获取目录大小;
private Long getFileDirSize() {
return this.fileDirSize;
}
/**
* 拓展2:删除指定文件目录及其下的所有文件
*/
@Test
public void Test2() {
String directory = "D:\\io流";
File file = new File(directory);
deleteDir(file);
}
private void deleteDir(File file) {
File[] files = file.listFiles();//获取此目录下所有的文件对象
for (File file1 : files) {//遍历
if (file1.isFile()) {//判断是否是文件
file1.delete();//删除文件
}
if (file1.isDirectory()) {//判断是否是目录
deleteDir(file1);//递归删除文件
file1.delete();//删除目录
}
}
}
}