java--File
作者:互联网
File的概述
为什么要学习File
因为在操作系统中,需要永久保存的数据,都是以文件的形式存在,所以要想操作这些被永久保存的数据,就首先必须在java语言中如何描述,表示文件
相对路径与绝对路径
绝对路径:
1.绝对路径名是 完整的路径名,不需要任何其他信息就可以定位它所表示的文件
windows:E:\demo\first\a.txt
相对路径
2.相反,相对路径名必须使用取自其他路径名的信息进行解释(不完整的路径名)
windows: (e:\demo)second\a.txt
java语言中,相对路径默认相对于谁?
默认情况下,java.io包中的类总是根据 当前用户目录 来解析相对路径名。此目录由系统属性 user.dir 指定,通常是 Java 虚拟机的调用目录。
public static void main(String[] args) {
// 获取默认的相对目录
String path = System.getProperty("user.dir");
System.out.println(path);
}
不同系统的路径表示
路径表示:
1.对于类 UNIX 平台,绝对路径名的前缀始终是 “/”。相对路径名没有前缀。表示根目录的绝对路径名的前缀为 “/” 且名称序列为空。
绝对路径: /home/st/6379.conf
相对路径: st/a.txt
根目录: /
2.对于 Microsoft Windows 平台,包含盘符的路径名前缀由驱动器号和一个 “:” 组成。如果路径名是绝对路径名,还可能后跟 "\“
绝对路径: e:\st\a.txt
相对路径:没有盘符前缀 st\a.txt
File类
件和目录路径名的抽象表示形式。
可以表示文件,也可以表示目录
构造方法
File(File parent, String child) 根据 parent 抽象路径名和 child 路径名字符串创建一个新 File 实例。 |
---|
File(String pathname) 通过将给定路径名字符串转换为抽象路径名来创建一个新 File 实例。 |
File(String parent, String child) 根据 parent 路径名字符串和 child 路径名字符串创建一个新 File 实例。 |
@Test
public void myTest1(){
String path = System.getProperty("user.dir");
System.out.println("path = " + path);
// File (String pathname)
File file = new File("D:\\app2\\a.txt");
// 在这里绝对路径是什么
// D:\workspace2\37th\java37th\15-file\a.txt
File file2 = new File("a.txt");
File file1 = new File("D:\\b");
//File (String parent, Sting child)
File file3 = new File("D:\\app2", "a.txt");
//File (File parent, String child)
File file4 = new File(new File("D:\\app2"), "a.txt");
}
成员方法
创建功能
//只负责创建文件,目录路径如果不存在,会报错而不是帮你创建
public boolean createNewFile()
//只负责创建目录,但只能创建单层目录,如果有多级目录不存在的话,创建失败
public boolean mkdir()
//只负责创建目录,但可以创建多级目录,如果多级目录不存在,则帮你全部创建
public boolean mkdirs()
mkdir 和 mkdirs创建目录的区别:
- mkdir仅能在已经存在的目录下,创建新的目录
- mkdirs 当要创建的目标目录,如果目标目录的父目录不存在的时候,它会将不存在的目标木目录的父目录 连同目标目录一起,都创建好
重命名功能
// 重新命名此抽象路径名表示的文件
public boolean renameTo(File dest)
- 在源文件,和修改之后的目标文件在同一目录的时候:
- 效果只是重命名
- 当源文件和,修改之后的目标文件当不在同一目录的时候:
- 移动文件
- 重命名
删除功能
// 删除此抽象路径名表示的文件或目录。如果此路径名表示一个目录,则该目录必须为空才能删除
// delete不会因为文件不存在,路径名不正确而抛出异常,只会返回false, 并且不会进入回收站
public boolean delete()
/*
* 删除功能
* 创建日期:2022/1/14 16:27
* @return void
* @author 景天
*/
@Test
public void myTest3(){
// // 删除此抽象路径名表示的文件或目录。如果此路径名表示一个目录,则该目录必须为空才能删除
delete不会因为文件不存在,路径名不正确而抛出异常,只会返回false, 并且不会进入回收站
//public boolean delete()
File file = new File("a\\b\\c\\");
System.out.println("file.delete() = " + file.delete());
}
判断功能
// 判断File对象是否表示的是一个文件
public boolean isFile()
//判断File对象是否表示的是一个目录
public boolean isDirectory()
//判断,File对象表示的文件,是否物理存在
public boolean exists()
/*
* 判断功能
* 创建日期:2022/1/14 16:33
* @return void
* @author 景天
*/
@Test
public void myTest4(){
// // 判断File对象是否表示的是一个文件
//public boolean isFile()
File file = new File("a.txt");
System.out.println("file.isFile() = " + file.isFile());
File file2 = new File("a");
System.out.println("file2.isFile() = " + file2.isFile());
判断File对象是否表示的是一个目录
// public boolean isDirectory()
System.out.println("file.isDirectory() = " + file.isDirectory());
System.out.println("file2.isDirectory() = " + file2.isDirectory());
判断,File对象表示的文件,是否物理存在
//public boolean exists()
System.out.println("file.exists() = " + file.exists());
File file1 = new File("a\\b\\c\\a.jpg");
System.out.println("file1.exists() = " + file1.exists());
}
基本获取功能
//获取File对象表示的抽象文件的绝对路径
public String getAbsolutePath()
//获取File对象表示的抽象文件,路径名字符串
public String getPath()
//获取文件或者目录的名字
public String getName()
//返回由此抽象路径名表示的文件的长度。不能返回文件夹的长度
//此抽象路径名表示的文件的长度,以字节为单位;如果文件不存在,则返回 0L
public long length()
//返回此抽象路径名表示的文件最后一次被修改的时间。
//表示文件最后一次被修改的时间的 long 值,用与时间点(1970 年1月1日,00:00:00 GMT)之间的毫秒数表示
public long lastModified()
高级获取功能
//返回一个字符串数组,这些字符串包括,此抽象的路径名表示的目录中的所有文件和文件夹的名字
//如果File对象表示的是一个文件,则返回null
//只能获取当前目录的下一层,并不是获取所有层级
//如果是一个空目录,返回一个长度为0的数组,而不是null
public String[] list()
//返回指定File目录下的文件和文件夹的绝对路径形式的File对象数组
//如果File对象表示的是一个文件,则返回null
//只能获取当前目录的下一层,并不是获取所有层级
//如果是一个空目录,返回一个长度为0的数组,而不是null
public File[] listFiles()
list
/*
* 高级获取功能 list
* 创建日期:2022/1/14 17:09
* @return void
* @author 景天
*/
@Test
public void myTest6(){
// //返回一个字符串数组,这些字符串包括,此抽象的路径名表示的目录中的所有文件和文件夹的名字
如果File对象表示的是一个文件,则返回null
只能获取当前目录的下一层,并不是获取所有层级
如果是一个空目录,返回一个长度为0的数组,而不是null
//public String[] list()
//File file = new File("a.txt");
//String[] list = file.list();
//System.out.println(list);
File dir = new File("D:\\app2");
String[] list = dir.list();
// 遍历 并打印
System.out.println("Arrays.toString(list) = " + Arrays.toString(list));
File dir2 = new File("a\\b");
String[] list1 = dir2.list();
System.out.println("Arrays.toString(list1) = " + Arrays.toString(list1));
}
listFiles
/*
* 高级获取功能 listFiles
* 创建日期:2022/1/14 17:15
* @return void
* @author 景天
*/
@Test
public void myTest7() {
返回指定File目录下的文件和文件夹的绝对路径形式的File对象数组
如果File对象表示的是一个文件,则返回null
只能获取当前目录的下一层,并不是获取所有层级
如果是一个空目录,返回一个长度为0的数组,而不是null
//public File[] listFiles()
File file = new File("a.txt");
File[] files = file.listFiles();
System.out.println(files);
File dir = new File("D:\\app2");
File[] files1 = dir.listFiles();
System.out.println("Arrays.toString(files1) = " + Arrays.toString(files1));
File dir2 = new File("a\\b");
File[] files2 = dir2.listFiles();
System.out.println("Arrays.toString(files2) = " + Arrays.toString(files2));
}
练习1
判断某个目录(单级)下有没有a.jpg文件,有的话输出
/*
* 判断某个目录(单级)下有没有a.jpg文件,有的话输出
* 创建日期:2022/1/14 17:24
* @return void
* @author 景天
*/
@Test
public void myTest8() {
// 创建File对象
File dir = new File("D:\\app2");
// 遍历 listFiles 得到File[] 数组
File[] files = dir.listFiles();
System.out.println(Arrays.toString(files));
for (File f : files) {
// 逐个判断
// 判断是否是文件
if (f.isFile()) {
// 如果是文件,再次判断是否是a.jpg文件
if (f.getName().endsWith("a.jpg")) {
// 如果是,输出文件名字
System.out.println("找到了");
System.out.println("f = " + f.getName());
}
}
}
}
练习2
递归输出某个目录下的所有java文件
/*
* 递归输出某个目录下的所有java文件
* 创建日期:2022/1/14 17:32
* @return void
* @author 景天
*/
@Test
public void myTest9() {
// 创建File对象
File dir = new File("D:\\app2");
findAllJavaFile(dir);
}
private void findAllJavaFile(File dir) {
// 首先把文件 目录都列出来 listFiles
File[] files = dir.listFiles();
// 遍历File[] 数组
for (File f : files) {
// 判断是否为文件
if (f.isFile()) {
// 如果是文件.再去判断是否是.java文件
if (f.getName().endsWith(".java")) {
// 如果是 ,输出绝对路径
System.out.println(f.getAbsolutePath());
}
}else {
//如果不是文件
// 递归,再次调用findAllJavaFile()
findAllJavaFile(f);
}
}
}
文件过滤器
-
自定义获取功能是在高级获取功能的基础上,加了一个过滤器,所以高级功能的特点它都有
-
FileFilter是一个接口,它只有下面一个方法
-
//测试指定抽象路径名是否应该包含在某个路径名列表中 boolean accept(File pathname)
-
这个方法相当于把高级功能中listFiles()获取的File数组中File对象遍历一遍,然后逐个判断
-
符合条件的留下,不符合条件的干掉(丢弃)-
-
-
常用匿名内部类来做实现
练习:
输出某个目录(单级)下的所有java文件,使用过滤器
手写自定义类的方式去做
class MyFilter implements FileFilter{
@Override
public boolean accept(File pathname) {
return pathname.getName().endsWith(".java");
}
}
@Test
public void myTest10(){
// 输出某个单级目录下的java文件
File dir = new File("D:\\app2");
File[] files = dir.listFiles(new MyFilter());
System.out.println("Arrays.toString(files) = " + Arrays.toString(files));
}
匿名内部类方式
@Test
public void myTest11(){
// 匿名内部类方式
// 输出某个单级目录下的java文件
File dir = new File("D:\\app2");
File[] files = dir.listFiles(new FileFilter() {
@Override
public boolean accept(File pathname) {
return pathname.getName().endsWith(".java");
}
});
System.out.println("Arrays.toString(files) = " + Arrays.toString(files));
}
标签:文件,java,--,System,目录,路径名,File,public 来源: https://blog.csdn.net/Dreamerfei/article/details/122500394