java高级之IO流
File类的使用
File类概述
-
对于经常使用计算机的人,对计算机系统里面的目录和文件一定不陌生,在计算机系统上我们可以手动新增、修改、删除、查看文件夹及文件夹里的文件,也可以通过
Java
标准库中的java.io.File
对象来操作文件和目录。 -
File类是文件和文件目录路径的抽象表示形式,它与平台无关,File类的一个对象,代表一个文件目录或一个文件。
-
File对象代表一个文件目录或一个文件,若磁盘中存在该对象表示的文件时,各个属性会显式赋值;如果磁盘中不存在该文件,创建的对象的属性取成员变量的默认值。
-
File 能对文件和目录进行相关操作,比如新建、删除、重命名,修改时间、文件大小等。也就是说,File类的操作层面在文件,它不能访问具体的文件内容,如果需要访问具体的文件内容,需要使用到输入/输出流。
-
Java程序中的一个File对象可能没有一个真实存在的文件或目录,但要在Java程序中表示一个真实存在的文件或目录,那么必须有一个File对象。
-
File对象可以作为参数传递给流的构造器。
路径分隔符
-
路径中的每级目录之间用一个路径分隔符隔开。不同的系统使用的路径分隔符也不同:windows和DOS系统默认使用
来表示,在Java字符串中需要用
\
表示一个、UNIX和URL使用
/
来表示。 -
Java程序支持跨平台运行,因此路径分隔符要谨慎使用。为了解决不同系统间路径分割符的隐患,File类提供了一个常量。
//该常量可以根据操作系统,动态的提供分隔符 public static final String separator = "" + separatorChar;
File类常用方法
构造方法
方法的格式 | 方法的描述 |
---|---|
File(String pathname) |
通过将给定的路径名字符串转换为抽象路径名来创建新的 File 实例 |
File(String parent, String child) |
从父路径名字符串和子路径名字符串创建新的 File 实例。 |
File(File parent, String child) |
从父抽象路径名和子路径名字符串创建新的 File 实例。 |
/**
* File类的构造方法
* 1、传入绝对路径 或者 传入相对路径
* File(String filePath)
* 2、传入父路径和子路径 String类型数据
* File(String parentPath,String childPath)
* 3、File类型 和 String类型的参数
* File(File parentFile,String childPath)
*/
@Test
public void test1(){
//1.1、相对于当前module 相对路径
File file1 = new File("hello.txt");
//1.2、绝对路径
File file2 = new File("/Users/mac/Documents/common/每日必看/hello.txt");
//2.1、两个String类型的参数
File file3 = new File("/Users/mac/Documents/common/每日必看","Java");
System.out.println(file3);
//3.1、一个File类型参数一个String类型参数
File file4 = new File(file3,"hi.txt");
}
获取方法
方法的格式 | 方法的描述 |
---|---|
String getAbsolutePath() |
返回此抽象路径名的绝对路径名字符串。 |
String getCanonicalPath() |
返回此抽象路径名的规范路径名字符串。 |
String getPath() |
将此抽象路径名转换为路径名字符串。 |
String getName() |
返回由此抽象路径名表示的文件或目录的名称 |
String getParent() |
获取上层文件目录路径。若无,返回null |
long length() |
获取文件长度(即:字节数)。不能获取目录的长度 |
long lastModified() |
获取最后一次的修改时间,毫秒值 |
String[] list() |
获取指定目录下的所有文件或者文件目录的名称数组 |
File[] listFiles() |
获取指定目录下的所有文件或者文件目录的File数组 |
File filemethod1 = new File("hello.txt");
File filemethod2 = new File("/Users/mac/Documents/common/每日必看/io/hello.txt");
//绝对路径
System.out.println(filemethod1.getAbsoluteFile());
//规范路径
System.out.println(filemethod1.getCanonicalPath());
//路径
System.out.println(filemethod1.getPath());
//名称
System.out.println(filemethod1.getName());
//上层文件目录路径
System.out.println(filemethod1.getParent());
//文件长度
System.out.println(filemethod1.length());
//最后一次的修改时间
System.out.println(new Date(filemethod1.lastModified()));
//指定目录下的所有文件或者文件目录的名称数组 重点在名称
File file = new File("/Users/mac/Documents/common/每日必看");
String[] list = file.list();
for(String s : list){
System.out.println(s);
}
System.out.println();
//指定目录下的所有文件或者文件目录的File数组 重点是所有的File目录
File[] files = file.listFiles();
for(File f : files){
System.out.println(f);
}
- 注意绝对路径和规范路径的区别:可以用
.
表示当前目录,..
表示上级目录。现在有两个目录:/Users/mac/Documents/common/每日必看1
、/Users/mac/Documents/common/每日必看2
。则每日必看1
的路径表示- 绝对路径:
/Users/mac/Documents/common/每日必看1
等价于/Users/mac/Documents/common/每日必看2/../每日必看1
- 规范路径:
/Users/mac/Documents/common/每日必看1
- 绝对路径:
重命名与判断方法
方法的格式 | 方法的描述 |
---|---|
boolean renameTo(File dest) |
重命名由此抽象路径名表示的文件 |
boolean isDirectory() |
测试此抽象路径名表示的文件是否为目录。 |
boolean isFile() |
测试此抽象路径名表示的文件是否为普通文件。 |
boolean exists() |
测试此抽象路径名表示的文件或目录是否存在。 |
boolean canRead() |
测试应用程序是否可以读取由此抽象路径名表示的文件。 |
boolean canWrite() |
测试应用程序是否可以修改由此抽象路径名表示的文件。 |
boolean canExecute() |
测试应用程序是否可以执行此抽象路径名表示的文件。 |
boolean isHidden() |
测试此抽象路径名命名的文件是否为隐藏文件 |
//目的地:file2 不能存在 file1存在才能返回true
File file1 = new File("/Users/mac/Documents/common/每日必看/io/hello.txt");
File file2 = new File("/Users/mac/Documents/common/每日必看/io/hello2.txt");
boolean flag = file1.renameTo(file2);
//是否为目录
System.out.println(file2.isDirectory());
//是否为普通文件
System.out.println(file2.isFile());
//是否存在
System.out.println(file2.exists());
//是否可以读取
System.out.println(file2.canRead());
//是否可以修改
System.out.println(file2.canWrite());
//是否可以执行
System.out.println(file2.canExecute());
//是否为隐藏文件
System.out.println(file2.isHidden());
创建和删除方法
方法的格式 | 方法的描述 |
---|---|
boolean createNewFile() |
创建文件。若文件存在,则不创建,返回false |
boolean mkdir() |
创建文件目录。如果此文件目录存在,不创建。如果此文件目录的上层目录不存在,不创建。 |
boolean mkdirs() |
创建由此抽象路径名命名的目录,包括任何必需但不存在的父目录。 |
boolean delete() |
删除由此抽象路径名表示的文件或目录。 |
File file1 = new File("/Users/mac/Documents/common/每日必看/io/hello.txt");
if(!file1.exists()){
//创建文件
file1.createNewFile();
System.out.println("创建!");
} else {
//删除文件
file1.delete();
System.out.println("删除!");
}
//创建文件目录 若此目录的上层目录不存在 不创建,若该目录存在,也不创建
File file2 = new File("/Users/mac/Documents/common/每日必看/io/file1/file2");
boolean mkdir = file2.mkdir();
System.out.println("mkdir = "+mkdir);
//创建目录,就算该目录的父目录不存在也会创建成功
File file3 = new File("/Users/mac/Documents/common/每日必看/io/file1/file3");
Boolean mkdir1 = file3.mkdirs();
System.out.println("mkdir1=" + mkdir1);
总结
- 主要讲
java.io.File
类的基本理解以及常见的问题,对File中的常用方法进行了简单练习。
欢迎关注
- 公众号简介:分享各种编程知识、excel相关技巧、读书笔记