一、File类的理解
1、File的对象代表着一个文件或者一个文件目录。
2、File类在java.io包下。
3、File类中涉及文件或文件目录相关的创建、删除、重命名、修改时间、文件大小等方法,并未涉及到对文件内部的内容的读取、写入等操作,如果需要对文件的内容进行操作,必须使用IO流。
4、后续File类的对象常常作为参数传入流的构造其中,指明写入或读取的“终点”。
二、File的实例化
1、常用构造器
File(String FilePath);
File(String parentPath,String childPath);
File(File file,String childPath);
@Test
public void test1(){
//构造器1
File file1 = new File("hello.txt");//相对于当前module下的位置.
File file2 = new File("E:\\Java\\ideacode\\workspace221115\\JavaSenior\\JavaSenior\\day08\\he.txt");
System.out.println(file1);
System.out.println(file2);
//构造器2
File file3 = new File("E:\\Java\\ideacode\\workspace221115\\JavaSenior\\JavaSenior","day08");
System.out.println(file3);
//构造器3
File file4 = new File(file3,"he.txt");
System.out.println(file4);
}
2、路径的分类
相对路径:相对于当前module下的路径
绝对路径:自盘符起的完整路径。
说明:
①在idea中:
如果使用单元测试方法中,相对路径是相对当前module下。
如果使用main()测试,相对路径则在当前Project下。
②在eclipse中:
无论是单元测试方法还是main()测试,相对路径都在当前工程下。
3、路径分隔符
①windows:\\
②unix:/
③Java程序支持跨平台运行,因此路径分隔符要慎用。为了解决这个隐患,File类提供了一个常量:
public static final String separator。根据操作系统,动态的提供分隔符。
File file1 = new File("d:\\atguigu\\info.txt");
File file2 = new File("d:" + File.separator + "atguigu" + File.separator + "info.txt");
File file3 = new File("d:/atguigu");
三、File类的常用方法
1、File类的获取功能
/*
public String getAbsolutePath():获取绝对路径
public String getPath() :获取路径
public String getName() :获取名称
public String getParent():获取上层文件目录路径。若无,返回null
public long length() :获取文件长度(即:字节数)。不能获取目录的长度。
public long lastModified() :获取最后一次的修改时间,毫秒值
以下两个方法时针对获取文件及文件目录
public String[] list() :获取指定目录下的所有文件或者文件目录的名称数组
public File[] listFiles() :获取指定目录下的所有文件或者文件目录的File数
*/
@Test
public void test2(){
File file1 = new File("hello.txt");
File file2 = new File("E:\\Java\\ideacode\\workspace221115\\io\\he.txt");
System.out.println(file1.getAbsoluteFile());
System.out.println(file1.getPath());
System.out.println(file1.getName());
System.out.println(file1.getParent());
System.out.println(file1.length());
System.out.println(new Date(file1.lastModified()));
System.out.println();
System.out.println(file2.getAbsoluteFile());
System.out.println(file2.getPath());
System.out.println(file2.getName());
System.out.println(file2.getParent());
System.out.println(file2.length());
System.out.println(file2.lastModified());
}
@Test
public void test3(){
File file1 = new File("E:\\Java\\ideacode\\workspace221115\\JavaSenior\\JavaSenior");
String[] list = file1.list();
for(String s : list){
System.out.println(s);
}
System.out.println();
File[] files = file1.listFiles();
for(File f : files){
System.out.println(f);
}
}
2、File类的重命名功能
/*
File类的重命名功能
public boolean renameTo(File dest):把文件重命名为指定的文件路径
以file1.renameTo(file2)为例:
要保证返回true:file1文件在硬盘中存在,并且file2在硬盘中不存在
*/
@Test
public void test4(){
File file1 = new File("hello.txt");
File file2 = new File("E:\\Java\\ideacode\\workspace221115\\io\\hi.txt");
boolean renameTo = file2.renameTo(file1);
System.out.println(renameTo);
}
3、File类的判断功能
/*
File类的判断功能
public boolean isDirectory():判断是否是文件目录
public boolean isFile() :判断是否是文件
public boolean exists() :判断是否存在
public boolean canRead() :判断是否可读
public boolean canWrite() :判断是否可写
public boolean isHidden() :判断是否隐藏
*/
@Test
public void test5(){
File file1 = new File("hello.txt");
System.out.println(file1.isDirectory());
System.out.println(file1.isFile());
System.out.println(file1.exists());
System.out.println(file1.canRead());
System.out.println(file1.canWrite());
System.out.println(file1.isHidden());
System.out.println();
File file2 = new File("E:\\Java\\ideacode\\workspace221115\\io");
System.out.println(file2.isDirectory());
System.out.println(file2.isFile());
System.out.println(file2.exists());
System.out.println(file2.canRead());
System.out.println(file2.canWrite());
System.out.println(file2.isHidden());
}
4、File类的创建和删除功能
/*
File类的创建功能
public boolean createNewFile() :创建文件。若文件存在,则不创建,返回false
public boolean mkdir() :创建文件目录。如果此文件目录存在,就不创建了。如果此文件目录的上层目录不存在,也不创建。
public boolean mkdirs() :创建文件目录。如果上层文件目录不存在,一并创建
注意事项:如果你创建文件或者文件目录没有写盘符路径,那么,默认在项目路径下。
File类的删除功能
public boolean delete():删除文件或者文件夹
删除注意事项:Java中的删除不走回收站。
*/
@Test
public void test6() throws IOException {
File file1 = new File("hi.txt");
if(!file1.exists()){
//创建文件
file1.createNewFile();
System.out.println("创建成功");
}else{//文件存在
//删除文件
file1.delete();
System.out.println("删除成功");
}
}
@Test
public void test7(){
//创建文件目录
File file1 = new File("E:\\Java\\ideacode\\workspace221115\\io\\io1\\io3");
boolean mkdir = file1.mkdir();
if(mkdir){
System.out.println("创建成功1");
}
File file2 = new File("E:\\Java\\ideacode\\workspace221115\\io\\io1\\io4");
boolean mkdirs = file2.mkdirs();
if(mkdirs){
System.out.println("创建成功2");
}
//删除文件目录,如果想删除成功,那么该文件目录下不能有文件或文件目录。Java中的删除不走回收站。
File file3 = new File("E:\\Java\\ideacode\\workspace221115\\io\\io1\\io4");
file3 = new File("E:\\Java\\ideacode\\workspace221115\\io\\io1");//false
System.out.println(file3.delete());
}
练习:判断指定目录下是否有后缀名为.jpg的文件,如果有,就输出该文件名称 。
public class FindJPGFileTest {
@Test
public void test1(){
File srcFile = new File("d:\\code");
String[] fileNames = srcFile.list();
for(String fileName : fileNames){
if(fileName.endsWith(".jpg")){
System.out.println(fileName);
}
}
}
@Test
public void test2(){
File srcFile = new File("d:\\code");
File[] listFiles = srcFile.listFiles();
for(File file : listFiles){
if(file.getName().endsWith(".jpg")){
System.out.println(file.getAbsolutePath());
}
}
}
/*
* File类提供了两个文件过滤器方法
* public String[] list(FilenameFilter filter)
* public File[] listFiles(FileFilter filter)
*/
@Test
public void test3(){
File srcFile = new File("d:\\code");
File[] subFiles = srcFile.listFiles(new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
return name.endsWith(".jpg");
}
});
for(File file : subFiles){
System.out.println(file.getAbsolutePath());
}
}
}