0%

IO之File类

该类用来将文件文件夹封装成对象,方便对文件和文件夹的属性信息进行操作。

1. 对象的创建与删除

可以使用File类创建一个文件对象,通常使用以下3种构造方法来创建文件对象。

  • File(String pathname)
  • File(String parent, String child);
  • File(File f, String child);

代码示例:

1
2
3
4
5
6
//创建文件对象
File file0 = new File("C:/Users/郑松涛/Desktop/demo.txt");
File file1 = new File("C:\\Users\\郑松涛\\Desktop","demo.txt");
File file2 = new File(new File("C:\\Users\\郑松涛\\Desktop"),"demo.txt");
//创建文件夹对象
File dir = new File("f:/myDir");
  • boolean createNewFile();

    如果FIle构造方法里的路径不存在指定的文件如demo.txt时,可以调用该方法创建指定的文件。

  • boolean mkdir(); 创建文件夹。

  • boolean delete(); 删除指定文件,如demo.txt。如果要删除的是目录,则该目录必须为空。

代码示例:

1
2
3
4
5
6
7
8
File file = new File("word.txt");
if (file.exists()) {
file.delete();
System.out.println("文件已删除!");
} else {
file.createNewFile();
System.out.println("文件已创建!");
}

2. 获取文件信息

File类提供了很多方法用于获取一些文件本身的信息,下面以代码的形式演示其用法。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
File file = new File("word.txt");
if (file.exists()) { //判断文件是否存在
String fileName = file.getName(); //获取文件名称
boolean canRead = file.canRead(); //判断文件是否可读
boolean canWrite = file.canWrite(); //判断文件是否可写
long length = file.length(); //获取文件长度,以字节为单位
String absolutePath = file.getAbsolutePath(); //获取文件绝对路径
String parentPath = file.getParent(); //获取父路径
boolean isFile = file.isFile(); //判断是否是文件
boolean isDirectory = file.isDirectory(); //判断是否是目录
boolean isHidden = file.isHidden(); //是否是隐藏文件
long lastModifiedTime = file.lastModified(); //获取最后修改时间

System.out.println("文件名称:" + fileName);
System.out.println("文件是否可读:" + canRead);
System.out.println("文件是否可写:" + canWrite);
System.out.println("文件长度:" + length);
System.out.println("文件绝对路径:" + absolutePath);
System.out.println("文件父路径:" + parentPath);
System.out.println("是否是文件:" + isFile);
System.out.println("是否是目录:" + isDirectory);
System.out.println("是否是隐藏文件:" + isHidden);
System.out.println("最后修改时间:" + new Date(lastModifiedTime));
} else {
System.out.println("文件不存在!");
}

输出结果:

1
2
3
4
5
6
7
8
9
10
文件名称:word.txt
文件是否可读:true
文件是否可写:true
文件长度:28
文件绝对路径:F:\eclipse-workspace\MyTest\word.txt
文件父路径:null
是否是文件:true
是否是目录:false
是否是隐藏文件:false
最后修改时间:Sun Jan 13 08:40:50 CST 2019

3. 系统根目录和文件容量获取

1
2
3
4
5
6
7
8
9
File[] listRoots = File.listRoots();//获取系统根
for (int i = 0; i < listRoots.length; i++) {
System.out.print(listRoots[i] + " ");
}//输出C:\ D:\ E:\ F:\

File file = new File("src/io/demo.txt");
long freeSpace = file.getFreeSpace(); //获取剩余空间
long totalSpace = file.getTotalSpace(); //获取全部空间
long usableSpace = file.getUsableSpace(); //获取可用空间

4. 获取目录内容

  • String[] list[]; 该方法获取当前目录下的文件以及文件夹的名称,包含隐藏文件。
    1
    2
    3
    4
    5
    File file = new File("f:/sublime text");
    String[] list = file.list();
    for (int i = 0; i < list.length; i++) {
    System.out.println(list[i]);
    }

运行结果:

1
2
3
1.js
practice.html
table.css

调用list方法的File对象中封装的必须是目录,否则会发生空指针异常。如果目录访问的系统级目录也会发生空指针异常。如果目录存在但是没有内容,则返回一个空数组。

  • File[] listFiles(); 获取当前目录下的所有内容,返回路径名数组

代码示例:

1
2
3
4
5
File file = new File("f:/dir");//构件目录对象
File[] listFiles = file.listFiles();
for (int i = 0; i < listFiles.length; i++) {
System.out.println(listFiles[i]);
}

在这里插入图片描述
运行结果:

1
2
3
4
5
6
f:\dir\demo1.txt
f:\dir\demo2.txt
f:\dir\demo3.java
f:\dir\demo4.class
f:\dir\dir1
f:\dir\dir2
  • File[] listFiles(FileFilter filter); 指定过滤器来获取当前目录下的指定内容

代码示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
//1.自定义过滤器,只有扩展名为txt才符合
class ImplementFilter implements FileFilter {

@Override
public boolean accept(File file) {
if(file.isDirectory()){
return false;
}else{
if(file.getName().endsWith(".txt")){
return true;
}
}
return false;
}
}
public class FileDemo {
public static void main(String[] args) throws Exception {
//2.获取目录下的指定内容
File file = new File("f:/dir");//构件目录对象
File[] listFiles = file.listFiles(new ImplementFilter());
for (int i = 0; i < listFiles.length; i++) {
System.out.println(listFiles[i]);
}
}
}

在这里插入图片描述
在这里插入图片描述
运行结果:

1
2
f:\dir\demo1.txt
f:\dir\demo2.txt
------ 本文结束------