java.io.File
File类概述:
文件和目录路径名的抽象表示形式。
java把电脑中的文件和文件夹封装成一个File类,我们可以使用File类对文件和文件夹进行操作
我们可以使用File类的方法
创建、删除、获取、判断是否存在、遍历、获取大小 一个文件/文件夹
File类是一个与系统无关的类,任何操作系统都可以使用该类的方法
重点记住三个单词:
file 文件
directory 文件夹/目录
path 路径
1、基础知识
/*File类静态方法
static String pathSeparator 与系统有关的路径分隔符,为了方便,它被表示为一个字符串。
static char pathSeparatorChar 与系统有关的路径分隔符。
static String separator 与系统有关的默认名称分隔符,为了方便,它被表示为一个字符串。
static char separatorChar 与系统有关的默认名称分隔符。
路径不能写死:C:\a\b\c.txt windows
C:/a/b/c.txt Linux
所以以后工作最好写成:
C:"+File.separator+"a"+File.separator+"b"+File.separator+"c.txt
路径:绝对路径:是一个完整路径
以盘符【C盘 D盘。。。】开始的路径
E:\SQL自学笔记、API文档\API
相对路径:是一个简化路径
指的是相对于当前项目的根目录
如果使用当前项目的根目录,路径可以简化书写
C:\\a\\b\\c.txt --> c.txt
注意:1、路径是不区分大小的
2、路径中文件名称分隔符windows使用反斜杠,反斜杠是转义字符,两个反斜杠代表一个普通的字符
File构造方法:
1、File(String pathname)
通过将给定路径名字符串转换为抽象路径名来创建一个新 File 实例。
2、File(String parent, String child)
根据 parent 路径名字符串和 child 路径名字符串创建一个新 File 实例。
父路径和子路径可以单独书写,使用起来很灵活;父子路径都可以变化。
3、File(File parent, String child)
根据 parent 抽象路径名和 child 路径名字符串创建一个新 File 实例。
*///静态方法
//构造方法
/*
* File (String pathname) 通过将给定路径名字符串转换为抽象路径名来创建一个新 File 实例。
* 参数:String pathname:字符串路径名称
* 路径可以是以文件结尾,也可以以文件夹结尾
* 路径可以是相对路径,也可以是绝对路径
* 路径可以是存在,也可以是不存在
* 创建File对象,只是把字符串路径封装为File对象,不考虑路径真假情况
File构造方法:
1、File(String pathname)
通过将给定路径名字符串转换为抽象路径名来创建一个新 File 实例。
2、File(String parent, String child)
根据 parent 路径名字符串和 child 路径名字符串创建一个新 File 实例。
父路径和子路径可以单独书写,使用起来很灵活;父子路径都可以变化。
3、File(File parent, String child)
根据 parent 抽象路径名和 child 路径名字符串创建一个新 File 实例。
好处:父路径和子路径可以单独书写,使用起来很灵活;父子路径都可以变化。
可以使用File类的方法对路径进行操作
*/
//成员方法
/*获取功能的方法:
String getAbsolutePath()
返回此抽象路径名的绝对路径名字符串
String getPath()
将此抽象路径名转换为一个路径名字符串。
String getName()
返回由此抽象路径名表示的文件或目录的名称 获取的是构造方法传递路径结尾部分【文件/文件夹】
long length()
返回由此抽象路径名表示的文件的长度 获取的是构造方法指向的文件的大小,字节为单位
注意:文件夹是没有大小概念的,不能获取文件夹大小;如果构造方法给出的路径不存在,那么length方法返回0
*/
/*File成员方法 判断功能
boolean exists()
测试此抽象路径名表示的文件或目录是否存在。
boolean isDirectory()
测试此抽象路径名表示的文件是否是一个目录。 判断给定了路径是否以文件夹结尾
boolean isFile()
测试此抽象路径名表示的文件是否是一个标准文件。 判断给定了路径是否以文件结尾
注意:电脑硬盘不是文件就是文件夹【2、3是互斥的】,所以这两个方法的使用前提,路径必须存在
*/
/*File类创建删除功能方法
1、boolean createNewFile()
当且仅当不存在具有此抽象路径名指定名称的文件时,不可分地创建一个新的空文件。 创建文件的路径和名称在构造方法中给出
注意:此方法只能创建文件;创建的文件路径必须存在
声明抛出IOExpection,所以调用这个方法必须处理这个异常。
4、boolean delete()
删除此抽象路径名表示的文件或目录
注意:此方法不走回收站,直接在硬盘删除
2、boolean mkdir()
创建此抽象路径名指定的目录。 创建单级文件夹
3、boolean mkdirs()
创建此抽象路径名指定的目录,包括所有必需但不存在的父目录。 既可以创建单级文件夹也可以创建多级文件夹
注意2、3:只能创建文件夹 创建文件路径必须存在,否则会抛出异常
*/
/*File类遍历文件夹/目录功能 包括隐藏文件夹
* String[] list()
返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中的文件和目录
File[] listFiles()
返回一个抽象路径名数组,这些路径名表示此抽象路径名表示的目录中的文件。
*注意:遍历的是构造方法给出的目录【参数】,如果不存在或不是一个目录,就会抛出空指针异常;
*
* */
2、练习代码
public class Demo01File {
public static void main(String[] args) {
//1
String pathSeparator = File.pathSeparator;//路径分隔符 windows系统是分号 Linux是冒号
System.out.println(pathSeparator);//;
//2
String separator = File.separator;//文件名称分隔符 windows 反斜杠 Linux 正斜杠
System.out.println(separator);//\
}
}
public class Demo05File {
public static void main(String[] args) throws IOException {
show01();
}
private static void show01() throws IOException {
//1
File f1=new File("C:\\练习计算机\\JAVA\\1.txt");
File f2=new File("2.txt");
boolean newFile1 = f1.createNewFile();
System.out.println(newFile1);//true 创建成功
boolean newFile2 = f2.createNewFile();
System.out.println(newFile2);
System.out.println(f2.getAbsolutePath());//E:\IdeaProjects\java_lianxi\2.txt
//2 3
File f3=new File("aaa");
boolean mkdir1 = f3.mkdir();
System.out.println(mkdir1);
System.out.println(f3.getAbsolutePath());//E:\IdeaProjects\java_lianxi\aaa
File f4=new File("bbb\\ccc");
System.out.println(f4.mkdirs());
System.out.println(f4.getAbsolutePath());//E:\IdeaProjects\java_lianxi\bbb\ccc
//4
File f5=new File("bbb\\ccc");
System.out.println(f5.delete());//true
}
}
/*
* 递归打印多级目录
*
* */
public class Demo01Recuison {
public static void main(String[] args) {
File f=new File("E:\\IdeaProjects\\java_lianxi\\.idea");
getAllFile(f);
}
/*参数传递File类型的目录
* */
public static void getAllFile(File dir){
File[] files1 = dir.listFiles();
/*for (File file1 : files1) {
System.out.println(file1);//问题:输出的只是一级文件夹里的文件,子文件夹里的内容无法打印
}*//*解决:对遍历得到的File对象进行判断
*/
for (File file2 : files1) {
if(file2.isDirectory()){
getAllFile(file2);
}
else{
System.out.println(file2);
}
}
}
}