IO-01-File类

IO-File类

File 类: 文件和目录路径名的抽象表示。

注意:File类只能操作文件的属性,文件的内容是不能操作的。

1. 字段

mark

我们知道,各个平台之间的路径分隔符是不一样的。

  • 对于UNIX平台,绝对路径名的前缀始终是”/“。相对路径名没有前缀。表示跟目目录的抽象路径名具有前缀”/“和空名称序列。
  • 对于Microsoft Windows平台,包含驱动器说明符的路径名的前缀由后面跟着":"的驱动器号组成,如果路径名是绝对的,则可能后跟"\\" 。NC路径名的前缀为"\\\\" ; 主机名和共享名称是名称序列中的前两个名称。没有有指定驱动器的相对路径名没有前缀。

那么为了屏蔽各个平台之间的分隔符差异,我们在构造File类的时候(如何构造,请看下面第二点),就可以使用上述Java为我们提供的字段。

1
2
System.out.println(File.pathSeparator); // 输出 ;
System.out.println(File.separator); // 输出 \
  • File.pathSeparator : 用来分割连续多个路径字符串的分隔符
  • File.separator: 用来分割同一个路径字符串中的目录

2. 构造方法

mark

如何使用上述构造方法,请看如下例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
//不使用 Java 提供的分隔符字段,注意:这样写只能在 Windows 平台有效
File f1 = new File("D:\\IO\\a.txt");
//使用 Java 提供的分隔符
File f2 = new File("D:"+File.separator+"IO"+File.separator+"a.txt");
System.out.println(f1);//输出 D:\IO\a.txt
System.out.println(f2);//输出 D:\IO\a.txt

//File(File parent, String child)
//从父抽象路径名和子路径名字符串创建新的 File实例。
File f3 = new File("D:");
File f4 = new File(f3,"IO");
System.out.println(f4); //D:\IO

//File(String pathname)
//通过将给定的路径名字符串转换为抽象路径名来创建新的 File实例。
File f5 = new File("D:"+File.separator+"IO"+File.separator+"a.txt");
System.out.println(f5); //D:\IO\a.txt

//File(String parent, String child)
//从父路径名字符串和子路径名字符串创建新的 File实例。
File f6 = new File("D:","IO\\a.txt");
System.out.println(f6); //D:\IO\a.txt

3. 常用方法

3.1 创建方法

  • boolean createNewFile() : 不存在返回true,存在返回false。
  • boolean mkdir() 创建目录,如果上一级目录不存在,则会创建失败
  • boolean mkdirs() 创建多级目录,如果上一级目录不存在也会自动创建

3.2 删除方法

  • boolean delete() 删除文件或目录,如果表示目录,则目录下必须为空才能删除
  • boolean deleteOnExit() 文件使用完成后删除

3.3 判断方法

  • boolean canExecute()判断文件是否可执行
  • boolean canRead()判断文件是否可读
  • boolean canWrite() 判断文件是否可写
  • boolean exists() 判断文件或目录是否存在
  • boolean isDirectory() 判断此路径是否为一个目录
  • boolean isFile()  判断是否为一个文件
  • boolean isHidden()  判断是否为隐藏文件
  • boolean isAbsolute()判断是否是绝对路径 文件不存在也能判断

3.4 获取方法

  • String getName() 获取此路径表示的文件或目录名称
  • String getPath() 将此路径名转换为路径名字符串
  • String getAbsolutePath() 返回此抽象路径名的绝对形式
  • String getParent()//如果没有父目录返回null
  • long lastModified()//获取最后一次修改的时间
  • long length() 返回由此抽象路径名表示的文件的长度。
  • boolean renameTo(File f) 重命名由此抽象路径名表示的文件。
  • File[] liseRoots()//获取机器盘符
  • String[] list() 返回一个字符串数组,命名由此抽象路径名表示的目录中的文件和目录。
  • String[] list(FilenameFilter 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
26
27
28
public static void main(String[] args) throws IOException {
//File(File parent, String child)
//从父抽象路径名和子路径名字符串创建新的 File实例。
File dir = new File("D:" + File.separator + "IO");
File file = new File(dir, "a.txt");

// 判断dir是否存在且表示一个目录
if (!(dir.exists()||dir.isDirectory())){
//如果 dir 不存在,则创建这个目录
dir.mkdirs();
//根据目录和文件名,创建 a.txt文件
file.createNewFile();
}

// 返回由此抽象路径名表示的文件或目录的名称。
// 这只是路径名称序列中的最后一个名字。
// 如果路径名的名称序列为空,则返回空字符串。
System.out.println(file.getName()); // a.txt

// 返回此抽象路径名的父路径名字符串,
// 如果此路径名未命名为父目录,则返回null。
System.out.println(file.getParent()); // D:\IO

//将此抽象路径名转换为路径名字符串。
// 结果字符串使用default name-separator character以名称顺序分隔名称。
System.out.println(file.getPath()); // D:\IO\a.txt

}

4. File 类的小技巧

  • 打印给定目录下的所有文件夹和文件夹里面的内容
1
2
3
4
5
6
7
8
9
10
11
12
public static void getFileList(File file){
// 第一级子目录
File[] files = file.listFiles();
for (File f : files) {
// 打印目录和文件
System.out.println(f);
// 递归打印目录和文件名
if (f.isDirectory()){
getFileList(f);
}
}
}
打赏
  • 版权声明: 本博客所有文章除特别声明外,均采用 Apache License 2.0 许可协议。转载请注明出处!
  • © 2019-2022 Zhuuu
  • PV: UV:

请我喝杯咖啡吧~

支付宝
微信