1、构造器
注意:以下构造器都是创建 File 对象,没有涉及到硬盘中真实存在的文件
1、 public File(String pathname)
:以 pathname 为路径创建 File 对象,可以是绝对路径或相对路径。
相对路径即为当前代码窗口所在的 module 路径。
(注意:在Test中写的相对路径是相对于该 module 下的,但是在类中的 main 方法中写的相对路径是相对于该工程下的)
绝对路径:包含盘符在内的文件或文件目录路径
路径分隔符:Windows \ —— unix / ——也可以用File类的常量File.separator
@Test
publc void Test(){
File file1 = new File("hello.txt");
File file2 = new File("C:\\Users\\admin\\AppData\\he.txt");
//等价于
//File file2 = new File("C:" + File.separator + "Users" + File.separator + "admin" + File.separator + "AppData" + File.separator + "he.txt");
System.out.println(file1); //hello.txt
System.out.println(file2); //C:\Users\admin\AppData\he.txt
}
(注意:在Test中写的相对路径是相对于该 module 下的,但是在类中的 main 方法中写的相对路径是相对于该工程下的)
@Test
publc void Test(){
File file1 = new File("hello.txt");
System.out.println(file1); //D:\Project\day01\hello.txt
}
public class A{
public static void main(String[] args){
File file2 = new File("hello.txt");
System.out.println(file2); //D:\Project\hello.txt
File file3 = new File("day01\\hello.txt");
System.out.println(file2); //D:\Project\day01\hello.txt
}
}
2、 public File(String parent,String child)
:以 parent 为父路径,child 为子路径创建 File 对象
child 可以是路径,也可以是具体文件
@Test
publc void Test(){
//此时是个路径,而非文件
File file3 = new File("C:\\Users\\admin", "AppData");
System.out.println(file3); //C:\Users\admin\AppData
}
3、 public File(File parent,String child)
:根据一个父 File 对象和子文件路径创建 File 对象
@Test
publc void Test(){
//此时是个文件
File file4 = new File(file3,"he.txt");
System.out.println(file3); //C:\Users\admin\AppData\he.txt
}
2、常用方法
public String getAbsolutePath()
:获取绝对路径
public String getPath()
:获取路径
public String getName()
:获取名称
public String getParent()
:获取上层文件目录路径,若无,返回 null
public long length()
:获取文件长度(文件字节大小),只可以是文件,不可以是目录
public long lastModified()
:获取最后一次修改时间,毫秒数,时间戳
@Test
public void Test1(){
File file1 = new File("hello.txt");
System.out.println(file1.getAbsolutePath()); //D:\workspace\atguigu\hello.txt
System.out.println(file1.getPath()); //hello.txt
System.out.println(file1.getName()); //hello.txt
System.out.println(file1.getParent()); // null
System.out.println(file1.length()); // 0
System.out.println(new Date(file1.lastModified())); // 0
File file2 = new File("C:\\Users\\admin\\AppData\\he.txt");
System.out.println(file2.getAbsolutePath()); //C:\Users\admin\AppData\he.txt
System.out.println(file2.getPath()); //C:\Users\admin\AppData\he.txt
System.out.println(file2.getName()); //he.txt
System.out.println(file2.getParent()); //C:\Users\admin\AppData
System.out.println(file2.length()); // 0
System.out.println(file2.lastModified()); // 0
}
以下的两个方法适用于文件目录:
public String[] list()
:获取指定目录下的所有文件或文件目录的 名称 数组
public File[] listFiles()
:获取指定目录下的所有文件或者文件目录的 File 数组
如果传入的目录不存在,则抛 空指针异常
@Test
public void Test1(){
File file = new File("C:\\Users\\admin\\AppData");
String[] list = file.list();
for(String s : list){
System.out.println(s);
}
File[] files = file.listFiles();
for(File f : files){
System.out.println(f);
}
}
public boolean renameTo(File dest)
:把文件重命名为指定的文件路径
比如:file1.renameTo(file2);
要想返回是true,就需要 file1 在硬盘中是存在的,而 file2 在硬盘中不存在
@Test
public void Test1(){
File file1 = new File("C:\\Users\\admin\\AppData\\hello.txt"); //存在
File file2 = new File("C:\\Users\\admin\\he.txt"); //不存在
boolean r = file1.renameTo(file2);
System.out.prinln(r); // true
}
执行后的结果就是目录下,C:\Users\admin
有一个文件 he.txt
,内容是 hello
。而目录 C:\Users\admin\AppData
下没有文件了
常用:
public boolean isDirectory()
:判断是否是文件目录
public boolean isFile()
:判断是否是文件
public boolean exists()
:判断是否存在
不常用:
public boolean canRead()
:判断是否可读
public boolean canWrite()
:判断是否可写
public boolean isHidden()
:判断是否隐藏
@Test
public void Test1(){
File file1 = new File("hello.txt"); //该文件存在
System.out.prinln(file1.isDirectory()); //false
System.out.prinln(file1.isFile()); //true
System.out.prinln(file1.exists()); //true
System.out.prinln(file1.canRead()); //true
System.out.prinln(file1.canWrite()); //true
System.out.prinln(file1.isHidden()); //false
File file2 = new File("hello11.txt"); //该文件不存在
System.out.prinln(file1.isDirectory()); //false
System.out.prinln(file1.isFile()); //false
System.out.prinln(file1.exists()); //false
System.out.prinln(file1.canRead()); //false
System.out.prinln(file1.canWrite()); //false
System.out.prinln(file1.isHidden()); //false
}
文件若是不存在,都是false
创建硬盘中对应的文件:
public boolean createNewFile()
:创建文件,若文件存在,则不创建
public boolean delete()
:删除磁盘中的文件或文件夹(要想删除目录成功,文件下面不可以有子目录或文件)
注意:java中的删除不走回收站
@Test
public void Test1() throw IOException{
File file = new File("hello.txt");
if(!file.exists()){
file.createNewFile();
System.out.println("创建成功");
}else{
file.delete();
System.out.println("文件已删除");
}
}
//要想删除目录 AppData 成功,文件下面不可以有子目录或文件
@Test
public void Test1() throw IOException{
File file = new File("C:\\Users\\admin\\AppData");
System.out.println(file.delete(););
}
创建硬盘中对应的文件目录:
public boolean mkdir()
:创建文件目录,若此目录存在,就不创建了。如果上层目录不存在,也不创建
public boolean mkdirs()
:创建文件目录,如果上层目录不存在,一并创建
注意:若创建文件或文件目录没有写盘符路径,则默认在该项目路径下
@Test
public void Test1() throw IOException{
//此时只有D盘中的io文件夹
File file = new File("D:\\io\\io1");
boolean b = file.mkdir();
if(b){
System.out.println("创建成功");
}
}
执行过后,D盘中的 io 文件夹中出现 io1 文件夹
此时没有 io2 文件夹,两个方法对比执行
@Test
public void Test1() throw IOException{
File file1 = new File("D:\\io\\io2\\io3");
boolean b1 = file.mkdir();
if(b1){
System.out.println("创建成功1");
}
File file2 = new File("D:\\io\\io2\\io3");
boolean b2 = file.mkdirs();
if(b2){
System.out.println("创建成功2");
}
}
输出:创建成功2
说明mkdirs()
方法创建文件目录,如果上层目录不存在,一并创建
mkdir()
方法如果上层目录不存在,都不创建
3、练习
1、 创建一个与 file1 同目录下的另外一个文件
@Test
public void Test1() throw IOException{
File file1 = new File("hello.txt");
//创建一个与file1同目录下的另外一个文件
File file2 = new File(file1.getParent(),"hi.txt");
boolean b = file2.creatNewFile();
if(b){
System.out.prinln("创建成功");
}
}
2、 判断指定目录下是否有后缀名为 “.jpg” 的文件,如果有,输出文件名称
//第一种:使用public String[] list()
@Test
public void Test1(){
File file1 = new File("D:\\io");
String[] list = file1.list();
for(String s : list){
if(s.endsWith(".jpg")){
System.out.println(s);
}
}
}
//第二种:使用public File[] listFiles()
@Test
public void Test1(){
File file1 = new File("D:\\io");
File[] list = file1.listFiles();
for(File f : list){
if(f.getName().endsWith(".jpg")){
System.out.println(f.getAbsolutePath());
}
}
}
//第三种:File类提供了两个文件过滤器方法
// public String[] list(FilenameFilter filter)
// public File[] listFiles(FileFilter filter)
@Test
public void Test1(){
File file1 = new File("D:\\io");
File[] subFile = file1.listFiles(new FilenameFilter(){
@Override
public boolean accept(File f, String name){
return name.endsWith(".jpg");
}
});
for(File f : subFile){
System.out.println(f.getAbsolutePath());
}
}
3、 遍历指定目录下所有文件名称,包括子目录中的文件
//第一种:递归实现
public class Test{
public static void main(String[] args){
//创建文件目录
File dir = new File("hello.txt");
//打印目录的子文件
println(dir);
}
public static void println(File f){
//打印目录的子文件
File[] file = f.listFiles();
for(File i : file){
if(i.isDirectory()){ //判断目录的子文件是否是文件目录
println(i);
}else{ //若目录下是子文件,输出文件名
System.out.prinln(i.getAbsolutePath());
}
}
}
}
拓展1:求指定目录所在空间的大小,求任意一个目录的大小
public long getDirectorySize(File file){
//file是文件,那么直接返回 file.length()
//如果file是目录,把他的下一级所有大小加起来就是总大小
long size = 0;
if(file.isFile()){
size += file.length();
}else{
File[] all = file.listFiles(); //file是目录,获取下一级
//递归,循环判断下一级
for(file f : all){
size += getDirectorySize(f);
}
}
return size;
}
拓展2:删除指定的目录
public long deleteDirectory(File file){
//如果file是文件或者空目录,直接删除自己
//如果file是有内容的目录,先把下一级干掉,最后删除自己
if(file.isDirectory()){
File[] all = file.listFiles(); //file是目录,获取下一级
//递归,循环判断下一级
for(file f : all){
size += deleteDirectory(f);
}
}
//删除自己
delete file;
}
4、小结
File 类
是一个对象,代表一个文件或一个文件目录(俗称:文件夹)File 类
声明在 java.io 包下File 类
中涉及到关于文件或文件目录的创建、删除、修改时间、文件大小等方法- 但并未涉及到写入、读取文件内容的操作
若需要读取或写入内容,必须使用IO流来完成 - 后续
File 类
的对象常作为参数传递到流的构造器中,指明读取或写入的“终点”
常用方法
public String getAbsolutePath()
:获取绝对路径public String getPath()
:获取路径public String getName()
:获取名称public String getParent()
:获取上层文件目录路径,若无,返回 nullpublic long length()
:获取文件长度(文件字节大小),只可以是文件,不可以是目录public long lastModified()
:获取最后一次修改时间,毫秒数,时间戳public String[] list()
:获取指定目录下的所有文件或文件目录的 名称 数组public File[] listFiles()
:获取指定目录下的所有文件或者文件目录的 File 数组public boolean renameTo(File dest)
:把文件重命名为指定的文件路径
需要 file1 在硬盘中是存在的,而 dest 在硬盘中不存在public boolean isDirectory()
:判断是否是文件目录public boolean isFile()
:判断是否是文件public boolean exists()
:判断是否存在public boolean createNewFile()
:创建文件,若文件存在,则不创建public boolean delete()
:删除磁盘中的文件或文件夹
(要想删除目录成功,文件下面不可以有子目录或文件)public boolean mkdir()
:创建文件目录,若此目录存在,就不创建了。如果上层目录不存在,也不创建public boolean mkdirs()
:创建文件目录,如果上层目录不存在,一并创建