Java - File类的详解及练习
目录
3.1 概述
-
File类位于Java.io包下,本章中涉及到的相关流也都声明在java.io包下。
-
File类的一个对象,对应于操作系统下的一个文件或一个文件目录(文件夹)
-
File类中声明了新建、删除、获取名称、重命名等方法,并没有涉及到文件内容的读写操作。要想实现文件内容的读写,我们就需要使用io流。
-
File类的对象,通常是作为io流操作的文件的端点出现的。
-
代码层面:将File类的对象作为参数传递到IO流相关类的构造器中。
-
3.2 File类的静态成员变量
-
static String pathSeparator
与系统有关的路径分隔符。-
Window操作系统,分隔符是分号。
-
Linux操作系统,分隔符是冒号。
-
-
static String separator
与系统有关的默认名称分隔符。-
Window操作系统,名称分割符号为 \。
-
Linux操作系统,名称分隔符号为 /。
-
3.3 绝对路径和相对路径
-
绝对路径:以Windows操作系统为例,包括盘符在内的文件或文件目录的完整路径。
-
相对路径:相对于某一个文件目录来讲的相对的位置。
-
在Idea中,如果使用单元测试方法:相对于当前的module来讲
-
如果使用main()方法,相对于当前的project来讲。
-
String path = "d:\\aaa\bbb\ccc\a.txt";//带盘符 绝对路径
String path2 = "a.txt"; //相对路径
?
3.4 File类构造方法
public File(String pathname)
:通过将给定的路径名字符串转换为抽象路径名来创建新的 File实例。
public File(String parent, String child)
:从父路径名字符串和子路径名字符串创建新的 File实例。
public File(File parent, String child)
:从父抽象路径名和子路径名字符串创建新的 File实例。
🧀实例1:(public File(String pathname)
)
package day1120;
import java.io.File;
public class TestDemo2 {
public static void main(String[] args) {
//创建文件对象f1,f1所指的文件是在当前目录下创建的a.txt
File f1=new File("a.txt");
}
}
🧀实例2:(public File(String parent, String child)
)
package day1120;
import java.io.File;
public class TestDemo2 {
public static void main(Stringargs) {
//注意C:目录实现必须存在,否则异常。
File f2=new File("C:","a.txt");
}
}
?🧀实例3:
public static void main(String[] args){
// 文件路径名
String pathname = "D:\\aaa.txt";
File file1 = new File(pathname);
System.out.println(file1);
// 通过父路径和子路径字符串
String parent = "d:\\aaa";
String child = "bbb.txt";
File file2 = new File(parent, child);
System.out.println(file2);
// 通过父级File对象和子路径字符串
File parentDir = new File("d:\\aaa");
String child = "bbb.txt";
File file3 = new File(parentDir, child);
System.out.println(file3);
}
注意:
-
一个File对象代表硬盘中实际存在的一个文件或者目录。
-
无论该路径下是否存在文件或者目录,都不影响File对象的创建。
3.5 File类的获取方法
public String getAbsolutePath()
:返回此File的绝对路径名字符串。
public String getPath()
:将此File转换为路径名字符串。
public String getName()
:返回由此File表示的文件或目录的名称。
public long length()
:返回由此File表示的文件的长度。
public File getParentFile()
返回由此File表示的文件或目录的父目录,如果没有父目录,返回null。
public long lastModfied()
获取最后一次的修改时间,毫秒值。
public static void main(String[] args) {
File f = new File("d:/aaa/bbb.java");
System.out.println("文件绝对路径:"+f.getAbsolutePath());
System.out.println("文件构造路径:"+f.getPath());
System.out.println("文件名称:"+f.getName());
System.out.println("文件长度:"+f.length()+"字节");
System.out.ptintln("文件路径的父路径"+f.getParentFile());
File f2 = new File("d:/aaa");
System.out.println("目录绝对路径:"+f2.getAbsolutePath());
System.out.println("目录构造路径:"+f2.getPath());
System.out.println("目录名称:"+f2.getName());
System.out.println("目录长度:"+f2.length());
System.out.ptintln("目录父路径"+f2.getParentFile());
}
3.6 File类判断方法
public boolean exists()
:此File表示的文件或目录是否实际存在。
public boolean isDirectory()
:此File表示的是否为目录。
public boolean isFile()
:此File表示的是否为文件。
public static void main(String[] args) {
File f = new File("d:\\aaa\\bbb.java");
File f2 = new File("d:\\aaa");
// 判断是否存在
System.out.println("d:\\aaa\\bbb.java 是否存在:"+f.exists());
System.out.println("d:\\aaa 是否存在:"+f2.exists());
// 判断是文件还是目录
System.out.println("d:\\aaa 文件?:"+f2.isFile());
System.out.println("d:\\aaa 目录?:"+f2.isDirectory());
}
?
3.7 File类创建删除功能的方法
public boolean createNewFile()
:当且仅当具有该名称的文件尚不存在时,创建一个新的空文件。
public boolean delete()
:删除由此File表示的文件或目录。 不进回收站,直接删除。
注意事项:
①Java中的删除不走回收站
②要删除一个文件目录,请注意该文件目录内不能包含文件或者文件目录。
-
public boolean mkdirs()
:创建由此File表示的目录,包括任何必需但不存在的父目录。
package day1211;
import java.io.File;
import java.io.IOException;
public class testDemo03 {
public static void main(String[] args) {
File file = new File("C:\\software\\javaproject\\decode\\src\\test\\hello.java");
//测试文件的创建与删除
if(!file.exists()){
try {
Boolean isSuccessed=file.createNewFile();
if(isSuccessed){
System.out.println("创建成功");
}
} catch (IOException e) {
e.printStackTrace();
}
}else{
System.out.println("此文件已存在");
file.delete();
System.out.println("文件删除成功");
}
}
}
?
3.8 File类目录遍历方法
-
public File[] listFiles()
返回一个File数组,表示该File目录中的所有的子文件或目录.
public static void main(String[] args) {
File dir = new File("C:\\software\\javaproject\\decode\\src\\test");
//获取当前目录下的文件以及文件夹对象,只要拿到了文件对象,那么就可以获取更多信息
File[] files = dir.listFiles();
for (File file : files) {
System.out.println(file);
}
}
?结果:
?
3.9 FileFilter接口
-
public File[] listFiles(FileFilter filter)
返回一个File数组,表示该File目录中的所有的子文件或目录,filter是文件过滤器,可以过滤不需要的文件。
文件过滤器接口,此接口的实现类可以传递给方法listFiles(),实现文件的过滤功能
FileFilter接口方法:
public boolean accept(File path)
:方法参数就是listFiles()方法获取到的文件或者目录的路径。如果方法返回true,表示需要此路径,否则此路径将被忽略。
遍历目录,获取所有的Java文件
public static void main(String[] args){
File dir = new File("d:\\demo");
File[] files = dir.listFiles(new FileFilter() {
@Override
public boolean accept(File pathname) {
//判断如果获取到的是目录,直接放行
if(pathname.isDirectory())
return true;
//获取路径中的文件名,判断是否java结尾,是就返回true
return pathname.getName().toLowerCase().endsWith("java");
}
});
for(File file : files){
System.out.println(file);
}
}
?面试题:Files的常用方法都有哪些?
-
exist,
-
isFile
-
isDirectory
-
listFile()
-
creatnewFile
-
mkdirs
3.10 练习题
1. 创建一个与hello.txt文件在相同文件目录下的另一个名为abc.txt文件
package day1211;
import java.io.File;
import java.io.IOException;
public class testDemo03 {
public static void main(String[] args) {
File file1=new File("C:\\software\\javaproject\\decode\\src\\test\\hello.txt");
if(file1.exists()){
File dir=file1.getParentFile();
File file2=new File(dir,"abc.txt");
try {
file2.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
2. 判断指定目录(C:\Users\35014\Desktop\大数据\java\img)下是否有后缀名为.png的文件,如果有,就输出该文件名称
package day1211;
import java.io.File;
import java.io.IOException;
public class testDemo03 {
public static void main(String[] args) {
File dir=new File("C:\\Users\\35014\\Desktop\\大数据\\java\\img");
File[] files=dir.listFiles();
for(File file:files){
if(file.getName().endsWith(".png")){
System.out.println(file.getName());
}
}
}
}
?结果:
?
3. 遍历指定文件目录下的所有文件的名称,包括子文件目录中的文件
Public void prindFileName(File file) //file可能是文件,也可能是文件目录
package day1204;
import java.io.File;
public class testDemo04 {
public static void main(String[] args) {
File file2=new File("C:\\software\\javaproject\\decode\\src");
printFileName(file2);
}
public static void printFileName (File file){
if (file.isFile()) {
System.out.println(file.getName());
} else if (file.isDirectory()) {
File[] files = file.listFiles();
for (File f : files) {
printFileName(f);
}
}
}
}
结果
4. 拓展1: 删除指定文件目录及其下的所有文件
Public void deleteDirectory(File file) //file可能是文件,也可能是文件目录
//删除指定文件目录及其下的所有文件
public static void deleteDirectory(File file){ //file可能是文件,也可能是文件目录
if(file.isFile()){
file.delete();
}else if(file.isDirectory()){
File[] files=file.listFiles();
for(File f:files){
deleteDirectory(f);
}
}
}
这个代码只能删除文件目录里面的文件,无法删除文件目录本身,可以将file.delete();放在后面等里面的都删完之后,再将其自身也删掉
//删除指定文件目录及其下的所有文件
public static void deleteDirectory(File file){ //file可能是文件,也可能是文件目录
if(file.isDirectory()){
File[] files=file.listFiles();
for(File f:files){
deleteDirectory(f);
}
}
file.delete();
}
5. 计算指定文件目录占用空间的大小
Public long getDirectorySize(File file) //file可能是文件,也可能是文件目录。
方法1
package day1204;
import java.io.File;
public class testDemo4 {
public static void main(String[] args) {
File file2 = new File("C:\\software\\javaproject\\decode\\src\\Detele");
System.out.println(getDirectorySize(file2));
}
static long sum = 0;
public static long getDirectorySize(File file) {
File[] files = file.listFiles();
for (File f : files) {
if (f.isFile()) {
sum = sum + f.length();
} else {
getDirectorySize(f);
}
}
return sum;
}
}
方法2
package day1204;
import java.io.File;
public class testDemo4 {
public static void main(String[] args) {
File file2 = new File("C:\\software\\javaproject\\decode\\src\\test11");
System.out.println(getDirectorySize(file2));
}
public static long getDirectorySize(File file) {
long sum=0;
if(file.isFile()){
sum=file.length();
}else {
File[] files = file.listFiles();
for (File f : files) {
sum = sum + getDirectorySize(f);
}
}
return sum;
}
}
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!