File类的使用
File类三个常见的构造器
如何创建File类的实例:File类三个常见的构造器的使用
先了解目录结构:
测试:
package com.atguigu.java;
import org.junit.Test;
import java.io.File;
/**
*
* File类的一个对象,代表一个文件或一个文件目录(文件夹)
* File类声明在 java.io包下
*
*/
public class FileTest {
public static void main(String[] args) {
File file1=new File("hello.txt");
System.out.println(file1.getAbsolutePath());
//输出E:\ideaworkspace\ideaprojects\JavaSenior\hello.txt
// 注意:main方法下的,helllo.txt相对路径是相对于当前工程JavaSenior
}
//以下都还没有在硬盘中存储相应的文件,只是内存层面的几个对象
@Test
public void test1(){
//创建File类的实例。方式一:File(String filePath)
File file1=new File("hello.txt"); //相对路径。
// 注意:单元测试方法下,hello.txt的相对路径是相对于当前module而言
File file2=new File("E:\\ideaworkspace\\ideaprojects\\JavaSenior\\day09\\he.txt"); //绝对路径
System.out.println(file1); //hello.txt
System.out.println(file2); //E:\ideaworkspace\ideaprojects\JavaSenior\day09\he.txt
//此时输出了两个文件的路径。因为这还只是内存层面的一个对象,还没有涉及到对文件数据的删改等操作。
//创建File类的实例。方式二:File(String parentPath,String childPath)
File file3=new File("E:\\ideaworkspace\\ideaprojects","JavaSenior");
System.out.println(file3); //E:\ideaworkspace\ideaprojects\JavaSenior
//创建File类的实例。方式三:File(File parent,String childPath)
File file4=new File(file3,"hi.txt");
System.out.println(file4); //E:\ideaworkspace\ideaprojects\JavaSenior\hi.txt
}
}
2,File类常用方法
① File类的获取功能:
package com.atguigu.java;
import org.junit.Test;
import java.io.File;
import java.util.Date;
/**
* File 类的常用方法
*/
public class MethodTest {
/*
File类的获取功能
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"); //相对路径。此处是相对当前的module而言。此处创造条件使module下的hello.txt文件存在,里面内容为“helloworld”
File file2=new File("D:\\IO\\hi.txt"); //绝对路径。此处创造条件使D盘下的IO文件夹为空,hi.txt不存在
System.out.println(file1.getAbsolutePath()); //E:\ideaworkspace\ideaprojects\JavaSenior\day09\hello.txt
System.out.println(file1.getPath()); //hello.txt
System.out.println(file1.getName()); //hello.txt
System.out.println(file1.getParent()); //null。"hello.txt" 写成相对路径为null,写成绝对路径才能看到
System.out.println(file1.length()); //10。10个字节
System.out.println(file1.lastModified()); //1650108819853。得到毫秒数
System.out.println(new Date(file1.lastModified())); //Sat Apr 16 19:33:39 CST 2022
System.out.println("***********");
System.out.println(file2.getAbsolutePath()); //D:\IO\hi.txt
System.out.println(file2.getPath()); //D:\IO\hi.txt
System.out.println(file2.getName()); //hi.txt
System.out.println(file2.getParent()); //D:\IO
System.out.println(file2.length()); //0
System.out.println(file2.lastModified()); //0
}
}
如下两个方法适用于文件目录获取:
首先E:\ideaworkspace\ideaprojects\JavaSenior的文件目录如下图:
测试list()、listfiles():
package com.atguigu.java;
import org.junit.Test;
import java.io.File;
/**
* File类的获取:
* public String[] list() :获取指定目录下的所有文件或者文件目录的名称数组
* public File[] listFiles() :获取指定目录下的所有文件或者文件目录的File数组
*
*/
public class MethodTest {
@Test
public void test2(){
File file=new File("E:\\ideaworkspace\\ideaprojects\\JavaSenior"); //若传入数据不存在,则会报错
String[] list = file.list();
for (String s:list){
System.out.println(s);
}
System.out.println(); //换行
File[] files=file.listFiles();
for (File f:files){
System.out.println(f);
}
}
}
②File类的重命名功能
package com.atguigu.java;
import org.junit.Test;
import java.io.File;
public class MethodTest {
@Test
/* File类的重命名功能:
public boolean renameTo(File dest):把文件重命名为指定的文件路径。如file1.renameTo(file2)
*/
public void test3() {
File file1=new File("hello.txt");
File file2=new File("D:\\IO\\hi.txt");
boolean renameTo = file1.renameTo(file2); //要想保证返回true,重命名成功。file1要存在,且file2不能存在
System.out.println(renameTo); //true
}
}
一开始当前moudle文件夹下的hello.txt文件存在,里面内容为"helloworld",且D盘IO文件夹中没有hi.txt。
执行以上代码之后,da09下的hello.txt消失,而D盘中IO文价夹下出现hi.txt,打开发现里面内容为"helloworld",如下图。
要想保证返回true,重命名成功。file1要存在,且file2不能存在。执行上述代码之后file1不存在,file2存在。
③File类的判断功能
先在day09目录下创建一个hello.txt文件,里面写入helloworld。
再进行如下测试
package com.atguigu.java;
import org.junit.Test;
import java.io.File;
public class MethodTest {
@Test
/*
public boolean isDirectory():判断是否是文件目录
public boolean isFile() :判断是否是文件
public boolean exists() :判断是否存在
public boolean canRead() :判断是否可读
public boolean canWrite() :判断是否可写
public boolean isHidden() :判断是否隐藏
*/
public void test4() {
//测试一个文件:注意此时的hello.txt是存在的,如果文件hello.txt不存在,以下输出全为false
File file1=new File("hello.txt");
System.out.println(file1.isDirectory()); //false
System.out.println(file1.isFile()); //true
System.out.println(file1.exists()); //true
System.out.println(file1.canRead()); //true
System.out.println(file1.canWrite()); //true
System.out.println(file1.isHidden()); //false
System.out.println(); //换行
//测试一个文件目录:该目录是存在的,如果文件目录D:\IO不存在,则以下输出全为false
File file2=new File("D:\\IO");
System.out.println(file2.isDirectory()); //true
System.out.println(file2.isFile()); //false
System.out.println(file2.exists()); //true
System.out.println(file2.canRead()); //true
System.out.println(file2.canWrite()); //true
System.out.println(file2.isHidden()); //false
}
}
④File类的创建和删除功能
简单演示:
package com.atguigu.java;
import org.junit.Test;
import java.io.File;
import java.io.IOException;
/**
*
* public boolean createNewFile() :创建文件。若文件存在,则不创建,返回false
* public boolean mkdir() :创建文件目录。如果此文件目录存在,就不创建了。如果此文件目录的上层目录不存在,也不创建。
* public boolean mkdirs() :创建文件目录。如果上层文件目录不存在,一并创建
* 注意事项:如果你创建文件或者文件目录没有写盘符路径,那么,默认在项目路径下。
*
*/
public class FileTest {
@Test
public void test1() throws IOException {
//演示文件的创建和删除
File file1=new File("hi.txt");
if (!file1.exists()){ //file1不存在则进入循环
file1.createNewFile();
System.out.println("创建成功");
}else{ //file1存在则删除file1
file1.delete();
System.out.println("删除成功");
}
}
@Test //创造条件使:一开始在D盘中有一个IO文件夹,里面内容为空。在这种情况下进行演示
public void test2(){
//演示文件目录的创建和删除
File file1=new File("D:\\IO\\IO1"); //注意D盘中存在目录IO,即IO1的上层目录存在
boolean mkdir = file1.mkdir();//此时调用mkdir()和调用mkdirs()没有区别
if (mkdir){
System.out.println("创建成功1"); //执行后在D盘IO文件夹下创建一个IO1的文件夹
}
File file2=new File("D:\\IOO\\IOO1");
boolean mkdirs = file2.mkdirs();
if (mkdirs){
System.out.println("创建成功2"); //上层目录不存在,但此处可以创建相应成功
}
}
}
总结:
File类中涉及到关于文件或文件目录的创建、删除、重命名、修改时间、文件大小等方法,并未涉及到写入或读取文件内容的操作。如果需要读取或写入文件内容,必须使用IO流来完成。
后续File类的对象常会作为参数传递到流的构造器中,指明读取或写入的“终点”
小练习:
创建一个与a.txt文件同目录下的另一个文件b.txt。
-
File file1=new File("d:\\a\\a.txt"); File file2=new File("file1.getParent()","b.txt");
注意:public String getParent():获取上层文件目录路径。若无,返回null