一.File类的介绍
java.io.File类
文件和目录路径名的抽象表示形式。
把计算机中的文件和文件夹(目录)封装为了File对象,就可以使用File对象来操作这些文件和文件夹
我们可以使用File对象创建文件和文件夹
我们可以使用File对象删除文件和文件夹
我们可以使用File对象获取文件和文件夹的路径
我们可以使用File对象获取文件的大小(单位是字节)
我们可以使用File对象遍历文件夹
记住3个相关的单词:
1.file:文件
2.directory:文件夹(目录)
3.path:路径
二.路径
路径:表示存储文件和文件夹的路径(位置)
分类:
1.绝对路径:以盘符开始的路径(c:,d:,e:)
c:\1.jpg d:\aaa\a.txt D:\Work_idea\EE141\day10
2.相对路径:相对于当前项目的根目录而言,我们使用路径,可以省略项目的根目录
项目的根目录:D:\Work_idea\EE141_new
注意:大家的项目根目录都不同
a.绝对路径[必须包含项目的根目录]才可以省略
D:\Work_idea\EE141\day10 可以省略为 day10
D:\Work_idea\EE141\day10\a.txt 可以省略为 day10\a.txt
c:\1.jpg 不能省略
1.jpg==> D:\Work_idea\EE141\1.jpg
abc\bbc\ccc\abc.java==>D:\Work_idea\EE141\abc\bbc\ccc\abc.java
b.当我们省略书写项目的根目录,java会在相对路径前默认给添加上
注意:
1.路径是不区分大小写的 c:\1.jpg 等价 C:\1.jpg
2.路径中目录的分割的符号\必须的写两个\,\本身是一个转义字符,必须的写两个代表一个
3.路径中目录的分割的符号也可以使用一个正斜杠/ c:\a.txt 等价 c:/a.txt
三.File的构造方法(重点)
package com.itheima.demo01File;
import java.io.File;
/*
File类的构造方法
public File(String pathname) :通过将给定的路径名字符串转换为抽象路径名来创建新的 File实例。
public File(String parent, String child) :从父路径名字符串和子路径名字符串创建新的 File实例。
public File(File parent, String child) :从父抽象路径名和子路径名字符串创建新的 File实例。
*/
public class Demo01FileConstructor {
public static void main(String[] args) {
//show02("c:\\","abc\\1.jpg");//c:\abc\1.jpg
//show02("c:\\","a.txt");//c:\a.txt
//show02("d:\\hello\\aaa","a.txt");//d:\hello\aaa\a.txt
show03();
}
/*
public File(File parent, String child) :从父抽象路径名和子路径名字符串创建新的 File实例。
参数:
File parent:父路径
String child:子路径
把路径分成了两部分,一个父路径,一个子路径
父路径和子路径可以分别传递不同的路径,组成各种各样的路径
*/
private static void show03() {
File p = new File("c:\\");
File file = new File(p,"a.txt");
System.out.println(file);//c:\a.txt
}
/*
public File(String parent, String child) :从父路径名字符串和子路径名字符串创建新的 File实例。
参数:
String parent:父路径
String child:子路径
把路径分成了两部分,一个父路径,一个子路径
父路径和子路径可以分别传递不同的路径,组成各种各样的路径
*/
private static void show02(String parent, String child) {
File file = new File(parent,child);
System.out.println(file);
}
/*
public File(String pathname) :通过将给定的路径名字符串转换为抽象路径名来创建新的 File实例。
参数:
String pathname:传递路径名称
注意:
1.参数传递的路径名称可以是绝对路径,也可以是相对路径
2.参数传递的路径名称可以是以文件结尾的,也可以是以文件夹结尾的
3.参数传递的路径名称可以是真实存在的,也可以是不存在的
构造方法仅仅是把字符串路径,转换为File对象,不考虑路径真实情况
*/
private static void show01() {
File f1 = new File("c:/abc/1.jpg");
System.out.println(f1);//c:\abc\1.jpg File类重写了Object类的toString方法
File f2 = new File("D:\\Work_idea\\EE390\\day10\\a.txt");
System.out.println(f2);//D:\Work_idea\EE390\day10\a.txt
File f3 = new File("day10\\a.txt");
System.out.println(f3);//day10\a.txt
File f4 = new File("C:\\demo");
System.out.println(f4);//C:\demo
}
}
四.File类的成员方法_获取功能的方法(重点)
public String getAbsolutePath() :返回此File的绝对路径名字符串。
public String getPath() :将此File转换为路径名字符串。
public String getName() :返回由此File表示的文件或目录的名称。
public long length() :返回由此File表示的文件的长度。 不能获取目录的长度
package com.itheima.demo01File;
import java.io.File;
/*
File类的成员方法_获取功能的方法(重点)
public String getAbsolutePath() :获取构造方法中传递路径的绝对路径。
构造方法中传递的路径是绝对的,直接返回绝对路径
构造方法中传递的路径是相对的,会在相对路径前添加项目根目录,组成绝对路径返回
public String getPath() :返回构造方法中传递的路径
构造方法中传递的路径是绝对的,就返回绝对路径
构造方法中传递的路径是相对的,就返回相对路径
public String getName() :返回由此File表示的文件或目录的名称。
public long length() :返回由此File表示的文件的大小。 不能获取目录的大小。
*/
public class Demo02FileMethod {
public static void main(String[] args) {
show04();
}
/*
public long length() :获取构造方法传递文件的大小,单位是字节.不能获取目录(文件夹)的大小。
注意:
1.构造方法中传递的文件不存在,此方法返回0
2.构造方法中传递的是一个文件夹的路径,则返回值是不确定的(文件夹是没有大小概念的)
*/
private static void show04() {
File f1 = new File("c:\\1.jpg");
System.out.println(f1.length());//161,548 字节
File f2 = new File("c:\\缘起.mp4");
System.out.println(f2.length());//67,995,218 字节
File f3 = new File("day10\\1.jpg");
System.out.println(f3.length());//0 文件不存在
File f4 = new File("D:\\Work_idea\\EE390\\day10");
System.out.println(f4.length());//0 4096 文件夹是没有大小概念的
}
/*
public String getName() :返回由此File表示的文件或目录的名称。
获取构造方法中传递的路径的末尾的文件|文件夹名称
*/
private static void show03() {
File f1 = new File("D:\\Work_idea\\EE390\\day10\\a.txt");
System.out.println(f1.getName());//a.txt
File f2 = new File("D:\\Work_idea\\EE390");
System.out.println(f2.getName());//EE390
File f3 = new File("aaa/bbb/ccc/ddd/eee/1.jpg");
System.out.println(f3.getName());//1.jpg
}
/*
public String getPath() :返回构造方法中传递的路径
构造方法中传递的路径是绝对的,就返回绝对路径
构造方法中传递的路径是相对的,就返回相对路径
File类重写了Object类的toString方法
public String toString() {
return getPath();
}
*/
private static void show02() {
File f1 = new File("D:\\Work_idea\\EE390\\day10\\a.txt");
System.out.println(f1.getPath());//D:\Work_idea\EE390\day10\a.txt
File f2 = new File("day10\\a.txt");
System.out.println(f2.getPath());//day10\a.txt
System.out.println(f2.toString());//day10\a.txt
System.out.println(f2);//day10\a.txt
}
/*
Absolute:绝对的
public String getAbsolutePath() :获取构造方法中传递路径的绝对路径。
构造方法中传递的路径是绝对的,直接返回绝对路径
构造方法中传递的路径是相对的,会在相对路径前添加项目根目录,组成绝对路径返回
*/
private static void show01() {
File f1 = new File("D:\\Work_idea\\EE390\\day10\\a.txt");
System.out.println(f1.getAbsolutePath());//D:\Work_idea\EE390\day10\a.txt
File f2 = new File("day10\\a.txt");
System.out.println(f2.getAbsolutePath());//D:\Work_idea\EE390\day10\a.txt
File f3 = new File("day10\\src");
System.out.println(f3.getAbsolutePath());//D:\Work_idea\EE390\day10\src
}
}
五.File类的成员方法_判断功能的方法(重点)
public boolean exists() :此File表示的文件或目录是否实际存在。
public boolean isDirectory() :此File表示的是否为目录。
public boolean isFile() :此File表示的是否为文件。
package com.itheima.demo01File;
import java.io.File;
/*
File类的成员方法_判断功能的方法(重点)
public boolean exists() :此File表示的文件或目录是否实际存在。
public boolean isDirectory() :此File表示的是否为目录。
public boolean isFile() :此File表示的是否为文件。
*/
public class Demo03FileMethod {
public static void main(String[] args) {
show02();
}
/*
public boolean isDirectory() :判断构造方法中传递的路径是否以文件夹结尾
是文件夹结尾,返回true
不是文件夹结尾,返回false
public boolean isFile() :判断构造方法中传递的路径是否以文件结尾
是文件结尾,返回true
不是文件结尾,返回false
注意:
1.以上两个方法使用的前提,路径必须是真实存在的,否则两个方法都返回false
2.在计算机中只有文件和文件夹,所以两个方法互斥
*/
private static void show02() {
File f1 = new File("c:\\abcde");//路径不存在
System.out.println(f1.isDirectory());//false
System.out.println(f1.isFile());//false
System.out.println("------------------------------");
File f2 = new File("day10\\a.txt");
if(f2.exists()){
System.out.println(f2.isDirectory());//false
System.out.println(f2.isFile());//true
}
System.out.println("------------------------------");
File f3 = new File("day10");
if(f3.exists()){
System.out.println(f3.isDirectory());//true
System.out.println(f3.isFile());//false
}
}
/*
public boolean exists() :判断构造方法中传递的路径是否存在
路径存在,返回true
路径不存在,返回false
*/
private static void show01() {
File f1 = new File("c:\\1.jpg");
System.out.println(f1.exists());//true
File f2 = new File("c:\\1afadsfdsafdsaf.jpg");
System.out.println(f2.exists());//false
File f3 = new File("day10\\a.txt");
System.out.println(f3.exists());//true
File f4 = new File("day11");
System.out.println(f4.exists());//false
}
}
六.File类的成员方法_创建删除功能的方法(重点)
public boolean createNewFile() :当且仅当具有该名称的文件尚不存在时,创建一个新的空文件。
public boolean mkdir() :创建由此File表示的目录。
public boolean mkdirs() :创建由此File表示的目录,包括任何必需但不存在的父目录。
public boolean delete() :删除由此File表示的文件或目录。
package com.itheima.demo01File;
import java.io.File;
import java.io.IOException;
/*
File类的成员方法_创建删除功能的方法(重点)
public boolean createNewFile() :当且仅当具有该名称的文件尚不存在时,创建一个新的空文件。
public boolean mkdir() :创建由此File表示的目录。
public boolean mkdirs() :创建由此File表示的目录,包括任何必需但不存在的父目录。
public boolean delete() :删除由此File表示的文件或目录。
*/
public class Demo04FileMethod {
public static void main(String[] args) throws IOException {
show03();
}
/*
public boolean delete() :删除构造方法传递的文件|文件夹
返回值:boolean
文件|文件夹存在,删除成功,返回true
文件|文件夹不存在,删除失败,返回false
文件夹中有内容,不会删除,返回false
注意:
此删除方法,不走回收站,直接在硬盘删除,需要谨慎
*/
private static void show03() {
File f1 = new File("d:\\1.txt");
boolean b1 = f1.delete();
System.out.println("b1:"+b1);
File f2 = new File("day10\\aaa");
boolean b2 = f2.delete();
System.out.println("b2:"+b2);
File f3 = new File("day10\\111");
boolean b3 = f3.delete();
System.out.println("b3:"+b3);//b3:false 文件夹中有内容,不会删除
}
/*
mk:make 创建,创造 dir:directory 文件夹
public boolean mkdir() :只能创建单级文件夹
public boolean mkdirs() :既能创建单级文件夹,又能创建多级文件夹
返回值:boolean
文件夹不存在,创建成功,返回true
文件夹存在,不会创建(覆盖),返回false 构造方法中路径不存在,返回false
注意:
1.此方法只能创建文件夹,不能创建文件
2.创建文件夹路径和文件夹名称,在构造方法中给出
*/
private static void show02() {
File f1 = new File("day10\\aaa");
boolean b1 = f1.mkdir();
System.out.println("b1:"+b1);
File f2 = new File("day10\\111\\222\\333\\444\\555\\666");
boolean b2 = f2.mkdirs();
System.out.println("b2:"+b2);
File f3 = new File("f:\\abc");
boolean b3 = f3.mkdir();
System.out.println("b3:"+b3);//b3:false 路径不存在
}
/*
create:创建
public boolean createNewFile() :当且仅当具有该名称的文件尚不存在时,创建一个新的空文件。
返回值:boolean
文件不存在,创建成功,返回true
文件存在,不会创建(覆盖),返回false
注意:
1.此方法只能创建文件,不能创建文件夹
2.创建文件路径和文件名称,在构造方法中给出
3.创建的文件的路径不存在,会抛出异常
4.有些操作系统的c盘没有权限创建文件,会抛出拒绝访问异常
*/
private static void show01() throws IOException {
File f1 = new File("d:\\1.txt");
boolean b1 = f1.createNewFile();
System.out.println("b1:"+b1);
File f2 = new File("day10\\2.txt");
boolean b2 = f2.createNewFile();
System.out.println("b2:"+b2);
File f3 = new File("f:\\3.txt");
//boolean b3 = f3.createNewFile();//IOException: 系统找不到指定的路径。
File f4 = new File("d:\\afdsafa\\3.txt");
//boolean b4 = f4.createNewFile();//IOException: 系统找不到指定的路径。 afdsafa文件夹不存在
}
}
七.File类的成员方法_目录遍历的方法(重点)
package com.itheima.demo01File;
import java.io.File;
/*
File类的成员方法_目录[文件夹]遍历的方法(重点)
public String[] list()
用于遍历目录,获取目录中所有文件和文件夹的名称,
把多个名称存储到一个String类型的数组中返回
public File[] listFiles()
用于遍历目录,获取目录中所有文件和文件夹,
把文件和文件夹封装为File对象,把多个File对象存储到一个File类型的数组中返回
注意:
1.要遍历的目录的路径和名称在构造方法中给出
2.遍历的目录不存在,会抛出空指针异常
3.以上两个方法只能变量目录,不能遍历文件,要遍历文件,也会抛出空指针异常
*/
public class Demo05FileMethod {
public static void main(String[] args) {
File file = new File("D:\\aaa");
//File file = new File("D:\\aaa\\1.jpg");//NullPointerException
//File file = new File("D:\\dfdsafdsafdsaf");//NullPointerException
String[] arr = file.list();
System.out.println(arr);
//在工作中:在遍历数组和集合之前,增加一个非空判断
if(arr!=null && arr.length>0){
for (String fileName : arr) {
System.out.println(fileName);
}
}
System.out.println("-------------------");
File[] files = file.listFiles();
System.out.println(files);
if(files!=null && files.length>0){
for (File f : files) {
System.out.println(f.getAbsolutePath());
}
}
}
}