Java学习【深入解读File类:从基础到高级的完整指南】

Java学习【深入解读File类:从基础到高级的完整指南】

🚀所属专栏:Java学习⭐⭐

🚀欢迎互三👉: 2的n次方_⭐⭐

⭐File的概述和构造方法File对象表示路径,可以是文件,也可以是文件夹,这个路径可以是存在的,也可以是不存在的

绝对路径:是从文件系统的根目录开始,到指定文件或目录的完整路径,它通常包含盘符

相对路径:是相对于当前工作目录或某个已知目录的路径

首先第一个,就是传入一个完整的路径创建文件对象

第二个:父级路径就是指包含该文件或目录的上一级目录的路径

字级路径是是某个目录下的文件或子目录

例如:"E:\java\a.txt"中的父级路径就是E:\java,子路径就是后面的a.txt

下面是三种构造方法示例:

代码语言:javascript代码运行次数:0运行复制public class FileDemo1 {

public static void main(String[] args) {

//E:\java\a.txt

String str = "E:\\java\\a.txt";

//根据文件路径创建文件对象

File f1 = new File(str);

System.out.println(f1);

String parent1 = "E:\\java";

String child1 = "a.txt";

//根据父路径和子路径创建文件对象

File f2 = new File(parent1,child1);

System.out.println(f2);

//把一个File表示的路径和一个String表示的路径进行拼接

File parent2 = new File("E:\\java");

String child2 = "a.txt";

File f3 = new File(parent2,child2);

System.out.println(f3);

}

}⭐File常见的成员方法接下来介绍一下File中常见的成员方法的使用

🌙构造方法代码语言:javascript代码运行次数:0运行复制public class FileDemo2 {

public static void main(String[] args) {

String str = "E:\\java\\a.txt";

File f1 = new File(str);

//判断是否是文件夹

System.out.println(f1.isDirectory());//false

//判断是否是文件

System.out.println(f1.isFile());//true

//判断是否存在

System.out.println(f1.exists());//true

}

}a.txt是一个文本文件,所以在判断是否是文件夹时返回值为false,同理如果传入的路径表示一个文件夹,在判断是否是文件时就会返回false,如果传入的是一个不存在的路径,在判断是否存在时也会返回false

🌙length()length()方法返回的文件大小为字节

代码语言:javascript代码运行次数:0运行复制 File f1 = new File("E:\\java\\a.txt");

long len = f1.length();

System.out.println(len);这个是a.txt的基本信息

也正确的打印出了文件的字节大小

length()方法只能获取文件的大小,如果是一个文件夹的话就会返回0,获取文件夹的大小需要把文件夹里所有的文件大小都加到一起

🌙getAbsoluteFile()和getPath()getAbsoluteFile():获取绝对路径

代码语言:javascript代码运行次数:0运行复制 File f1 = new File("text\\file\\FileDemo3.java");

File f2 = new File("E:\\java\\java.text\\text\\text\\file\\FileDemo3.java");

//获取绝对路径

System.out.println(f1.getAbsoluteFile());

System.out.println(f2.getAbsoluteFile());不论创建对象时传入的是相对路径还是绝对路径,最后返回的都是绝对路径

getPath():返回定义文件时所使用的路径

代码语言:javascript代码运行次数:0运行复制 File f1 = new File("text\\file\\FileDemo3.java");

File f2 = new File("E:\\java\\java.text\\text\\text\\file\\FileDemo3.java");

System.out.println(f1.getPath());

System.out.println(f2.getPath());🌙getName()和lastModified()getName就是获取名字,如果是文件,会获取完整的文件名,包括后缀名,如果是文件夹,也就会返回完整的文件夹的名字

代码语言:javascript代码运行次数:0运行复制 File f2 = new File("text\\file\\FileDemo3.java");

//获取文件名,(文件名+后缀)

System.out.println(f2.getName());

File f3 = new File("text\\file");

//获取文件夹名

String name = f3.getName();

System.out.println(name);lastModified()返回的是文件最后的修改时间,单位是毫秒,根据Date类,可以转换为想要的格式

代码语言:javascript代码运行次数:0运行复制//获取文件最后修改时间(毫秒值)

long time = f1.lastModified();

//将毫秒值转换成日期对象

Date date = new Date(time);

//将日期对象转换成yyyy-MM-dd HH:mm:ss格式

String time1 = date.toLocaleString();

System.out.println(time1);⭐文件的创建和删除

在使用createNewFile时会有一个异常需要抛出处理

创建文件时,如果当前路径文件已存在,返回false,创建失败,同时,如果写入的父级路径不存在也会报错

createNewFile方法创建的一定是文件,如果路径中没有后缀,就会创建一个没有后缀的文件

代码语言:javascript代码运行次数:0运行复制public class FileDemo4 {

public static void main(String[] args) throws IOException {

File f1 = new File("E:\\java\\b.txt");

//创建文件,如果当前路径文件已存在,返回false

//如果父级路径不存在,就会报异常

//createNewFile方法创建的一定是文件,如果路径中没有后缀,就会创建一个没有后缀的文件

boolean flag = f1.createNewFile();

System.out.println(flag);//true

}

}mkdir()和mkdirs()都是创建文件夹的方法,前面的是创建单级文件夹,后面是创建多级文件夹,如果用mkdir去创建多级文件夹就会报错,但如果用mkdirs去创建单极文件夹也能创建成功

代码语言:javascript代码运行次数:0运行复制public class FileDemo4 {

public static void main(String[] args) throws IOException {

File f2 = new File("E:\\java\\aaa");

//创建文件夹(目录),如果与已存在文件名重名,则创建失败,也不能创建多级文件夹

System.out.println(f2.mkdir());

//mkdirs:创建多级文件夹(既可以创建单极文件夹又可以创建多级文件夹)

File f3 = new File("E:\\java\\aaa\\bbb\\ccc");

System.out.println(f3.mkdirs());

System.out.println(f2.delete());//true

System.out.println(f3.delete());//true

}

}delete方法只能删除文件和空的文件夹,并且不走回收站,彻底删除

⭐获取并遍历

listFiles:获取文件夹中的所有内容,把内容放在数组中返回

代码语言:javascript代码运行次数:0运行复制public class FileDemo5 {

public static void main(String[] args) {

File f1 = new File("E:\\HTML");

//listFiles:获取文件夹中的所有内容,把内容放在数组中返回

File[] files = f1.listFiles();

for(File f:files){

System.out.println(f);

}

}

}

注意:

当调用者表示的路径不存在时,返回null

当调用者表示的路径是文件时,返回null

当调用者File表示的路径是一个空文件夹时,返回一个长度为0的数组

当调用者File表示的路径是一个有内容的文件夹时,将里面所有文件和文件夹的路径放在File数组中返回

当调用者File表示的路径是一个有隐藏文件的文件夹时,会将里面所有的文件和文件夹的路径放在数组中返回,包括隐藏文件

当调用者File表示的路径是需要权限才能访问的文件夹时,返回null

listRoots其实就是获取系统的盘符

代码语言:javascript代码运行次数:0运行复制// 列出所有的盘符

File[] arr1 = File.listRoots();

System.out.println(Arrays.toString(arr1));

list获取的就是当前路径下所有的文件或文件夹的名字

代码语言:javascript代码运行次数:0运行复制//list:获取当前路径下所有的内容(名字)

File f1 = new File("E:\\java");

String[] arr2 = f1.list();

for (String s : arr2) {

System.out.println(s);

}

接下来的方法是利用文件名过滤器获取当前该路径下的所有内容

下面是一个获取文件中所有txt文件的例子:

FilenameFilter是一个函数式接口,可以通过匿名内部类的方式进行实现

代码语言:javascript代码运行次数:0运行复制 File f2 = new File("E:\\java");

//accept方法的形参:依次表示java文件夹里面每一个文件或文件夹的路径

//参数一:父级路径

//参数二:子级路径

//返回值:true表示当前路径保留,false表示当前路径不保留

String[] arr3 = f2.list(new FilenameFilter() {

@Override

public boolean accept(File dir, String name) {

File src = new File(dir, name);

//筛选出以txt为后缀的文件

if (src.isFile() && name.endsWith(".txt")) {

return true;

} else return false;

}

});

System.out.println(Arrays.toString(arr3));利用listFiles()也可以实现这个要求,listFiles()返回一个File对象数组,数组中的元素是File对象,这些对象代表了目录中的文件或子目录的完整路径,进而可以通过调用方法进行判断

代码语言:javascript代码运行次数:0运行复制 File f3 = new File("E:\\java");

File[] arr4 = f3.listFiles();

for (File f : arr4) {

if (f.isFile() && f.getName().endsWith(".txt")) {

System.out.println(f.getName());

}

}listFiles()也可以用文件名过滤器的方法来实现,

代码语言:javascript代码运行次数:0运行复制 File[] arr5 = f4.listFiles(new FileFilter() {

@Override

public boolean accept(File pathname) {

return pathname.isFile() && pathname.getName().endsWith(".txt");

}

});

System.out.println(Arrays.toString(arr5));

System.out.println("--------------------");

File[] arr6 = f4.listFiles(new FilenameFilter() {

@Override

public boolean accept(File dir, String name) {

return new File(dir, name).isFile() && name.endsWith(".txt");

}

});

System.out.println(Arrays.toString(arr6));FileFilter用于过滤File对象,使用FileFilter时已经拥有了一个File对象,因此可以直接使用该对象的属性而无需再次创建新的File对象

FilenameFilter用于过滤文件名,使用FilenameFilter时由于只获得了文件名,因此如果需要访问文件的属性(如是否是文件),则必须再次使用文件名和目录来创建新的File对象。

相关推荐

淘宝网达人的崛起与成长之路
abefd365bet娱乐场

淘宝网达人的崛起与成长之路

09-23 阅读 6246
眭姓起源分布与家谱家族
365彩票娱乐平台

眭姓起源分布与家谱家族

09-06 阅读 3041
打卤莜面栲栳栳
bet5365入口

打卤莜面栲栳栳

08-19 阅读 3627