目录
扫描二维码关注公众号,回复:
12825605 查看本文章
3.2 文件过滤器改进输出指定目录下指定后缀名的文件名称案例
1.File类的概述
1.1 File类的定义
文件和文件夹路径名的抽象表示形式。
1.2 File类的构造方法
- public File(String filename):根据一个路径得到File对象
- public File(String parent, String child):根据一个目录和一个子文件/目录得到File对象
- public File(File parent, String child):根据一个父File和一个子文件/目录得到File对象
代码如下:
package cn.itcast_01;
import java.io.File;
/*
* File:文件和文件夹路径名的抽象表示形式
*/
public class FileDemo {
public static void main(String[] args) {
// 把D:\\develop\\demo封装成一个File对象,并不是在F盘目录下创建一个目录develop\\demo
// 仅仅表示File对象指向D:\\develop\\demo这个目录
File file = new File("D:\\develop\\demo");
System.out.println(file.getAbsolutePath()); // D:\develop\demo
// public File(String parent, String child):根据一个目录和一个字文件/目录得到File对象
File file2 = new File("D:\\develop", "demo.txt");
System.out.println(file2.getAbsolutePath()); // D:\develop\demo.txt
// public File(File parent, String child):根据一个父File和一个字文件/目录得到File对象
File parentFile = new File("D:\\develop");
File file3 = new File(parentFile, "demo.txt");
System.out.println(file3.getAbsolutePath()); // D:\develop\demo.txt
}
}
2.File类的成员方法
2.1 创建功能
- public boolean createNewFile():创建文件,如果存在这样的文件,就不用创建了
- public boolean mkdir():创建文件夹,如果存在这样的文件夹,就不用创建了
- public boolean mkdirs():创建文件夹,如果存在这样的文件夹,就不用创建了;如果父文件夹不存在,会自动创建出来
具体用法,参考下面的代码:
package cn.itcast_01;
import java.io.File;
import java.io.IOException;
/**
* 创建功能
*
* @author HW
*
*/
public class FileDemo3 {
public static void main(String[] args) {
// 需求1:在D盘目录下创建一个文件夹test
File file = new File("D:\\test");
System.out.println("mkdir():" + file.mkdir());
// 需求2:在D盘目录test下创建一个文件test.txt
File file2 = new File("D:\\test\\test.txt");
try {
System.out.println("createNewFile():" + file2.createNewFile());
} catch (IOException e) {
e.printStackTrace();
}
// 需求3:在D盘目录下创建一个文件夹demo,并在demo文件夹下创建一个文件demo.txt
// 报异常:java.io.IOException: 系统找不到指定的路径。所以,要想在某个目录下创建内容,该目录首先必须存在!
File file3 = new File("D:\\demo\\demo.txt");
try {
System.out.println("createNewFile():" + file3.createNewFile());
} catch (IOException e) {
e.printStackTrace();
}
// 需求4:在D盘目录下创建一个文件夹aaa,并在aaa文件夹下创建一个文件夹bbb
// mkdir():false,返回值为false,说明文件夹创建失败,同样的,要想在某个目录下创建内容,该目录首先必须存在!
File file4 = new File("D:\\aaa\bbb");
System.out.println("mkdir():" + file4.mkdir());
// 对于需求4,我们可以先创建aaa文件夹,然后创建bbb文件夹,如果文件夹嵌套的层数比较多,这样做就会比较麻烦!
// File类提供了一个简单的方法mkdirs(),来创建多层文件夹
File file5 = new File("D:\\aaa\\bbb\\ccc\\ddd");
System.out.println("mkdirs():" + file5.mkdirs());
}
}
2.2 删除功能
- public boolean delete():删除文件/文件夹
具体用法参考下面的代码:
package cn.itcast_01;
import java.io.File;
import java.io.IOException;
/**
* 删除功能:public boolean delete():删除文件/文件夹
*
* @author HW
*
*/
public class FileDemo4 {
public static void main(String[] args) {
// 在该项目根路径下创建一个文件a.txt
File file = new File("a.txt");
try {
System.out.println("创建a.txt文件:" + file.createNewFile());
} catch (IOException e) {
e.printStackTrace();
}
// 在该项目根路径下创建文件夹aaa\\bbb\\ccc
File file2 = new File("aaa\\bbb\\ccc");
System.out.println("创建aaa\\bbb\\bbb文件夹:" + file2.mkdirs());
// 需求1:删除a.txt文件
System.out.println("删除a.txt文件:" + file.delete());
// 需求2:删除ccc文件夹
System.out.println("删除ccc文件夹:" + file2.delete());
// 需求3:删除bbb文件夹
// 将File对象指向aaa\\bbb这个目录
File file3 = new File("aaa\\bbb");
System.out.println("删除bbb文件夹:" + file3.delete());
// 需求4:删除aaa文件夹
// 将File对象指向aaa这个目录
File file4 = new File("aaa");
System.out.println("删除aaa文件夹:" + file4.delete());
}
}
2.3 重命名功能
- public boolean renameTo(File dest) :如果路径名相同,就是改名。如果路径名不同,就是改名并剪切。
代码如下:
package cn.itcast_01;
import java.io.File;
/**
* 重命名功能:public boolean renameTo(File dest)
*
* @author HW
*
*/
public class FileDemo5 {
public static void main(String[] args) {
// method1();
method2();
}
/*
* 需求2:将D盘目录下的animal.jpeg移动到该项目的根目录下,并重命名为bird.jpeg
*/
private static void method2() {
File file = new File("D:\\animal.jpeg");
File destFile = new File("bird.jpeg");
// 如果路径名不同,就是改名并剪切
System.out.println("renameTo():" + file.renameTo(destFile));
}
/*
* 需求1:将D盘目录下的bird.jpeg重命名为animal.jpeg
*/
private static void method1() {
File file = new File("D:\\bird.jpeg");
File destFile = new File("D:\\animal.jpeg");
// 如果路径名相同,就是改名
System.out.println("renameTo():" + file.renameTo(destFile));
}
}
2.4 判断功能
- public boolean isDirectory():判断是否是目录(文件夹)
- public boolean isFile():判断是否是文件
- public boolean exists():判断是否存在
- public boolean canRead():判断是否可读
- public boolean canWrite():判断是否可写
- public boolean isHidden():判断是否隐藏
package cn.itcast_01;
import java.io.File;
import java.io.IOException;
/**
* 判断功能
*
* @author HW
*
*/
public class FileDemo6 {
public static void main(String[] args) {
File file = new File("test.txt");
try {
// 创建test.txt文件
file.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("isDirectory():" + file.isDirectory());
System.out.println("isFile():" + file.isFile());
System.out.println("exists():" + file.exists());
System.out.println("canRead():" + file.canRead());
System.out.println("canWrite():" + file.canWrite());
System.out.println("isHidden():" + file.isHidden());
// 删除test.txt文件
file.delete();
}
}
2.5 获取功能
- public String getAbsolutePath():获取绝对路径
- public String getPath():获取相对路径
- public String getName():获取名称,返回抽象路径名表示的文件或目录的名称。该名称是路径名名称序列中的最后一个名称。如果路径名名称序列为空,则返回空字符串。
- public long length():获取长度,字节数
- public long lastModified():获取最后一次的修改时间,毫秒值
具体用法参考如下代码:
package cn.itcast_01;
import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
* 获取功能
*
* @author HW
*
*/
public class FileDemo7 {
public static void main(String[] args) {
File file = new File("test.txt");
try {
// 创建test.txt文件
file.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("getAbsolutePath():" + file.getAbsolutePath());
System.out.println("getPath():" + file.getPath());
System.out.println("getName():" + file.getName());
System.out.println("length():" + file.length());
System.out.println("lastModified():" + file.lastModified());
System.out.println("====================");
long d = file.lastModified();
// 根据给定的毫秒值创建Date对象
Date date = new Date(d);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String currentDate = sdf.format(date);
System.out.println(currentDate);
}
}
2.6 高级获取功能
- public String[] list():获取指定目录下的所有文件或者文件夹的名称数组
- public File[] listFiles():获取指定目录下的所有文件或者文件夹的File数组
具体用法参考如下代码:
package cn.itcast_01;
import java.io.File;
/**
* 高级获取功能
*
* @author HW
*
*/
public class FileDemo8 {
public static void main(String[] args) {
File file = new File("D:\\develop");
// public String[] list():获取指定目录下的所有文件或者文件夹的名称数组
String[] fileNameArray = file.list();
for (String fileName : fileNameArray) {
System.out.println(fileName);
}
System.out.println("=========================");
// public File[] listFiles():获取指定目录下的所有文件或者文件夹的File数组
File[] fileArray = file.listFiles();
for (File f : fileArray) {
System.out.println(f.getName());
}
}
}
3.File类的练习
3.1 输出指定目录下指定后缀名的文件名称案例
需求:判断D:\\develop\\images目录下是否有后缀名为.jpg的文件,如果有,就输出此文件名称
代码如下:
package com.file;
import java.io.File;
/**
* File练习:
* 判断D:\\develop\\images目录下是否有后缀名为.jpg的文件,如果有,就输出此文件名称
*
* @author HW
*
*/
public class FileTest {
public static void main(String[] args) {
// 把D:\\develop\\images封装成一个File对象
File file = new File("D:\\develop\\images");
// 获取该目录下所有文件或文件夹的File数组
File[] fileArray = file.listFiles();
// 遍历该File数组,得到每一个File对象
for (File f : fileArray) {
// // 判断每个File对象是否是文件
if(f.isFile()) {
// 如果是文件,判断是否以后缀名.jpg结尾,如果以.jpg结尾,则输出该文件名称
if(f.getName().endsWith(".jpg")) {
System.out.println(f.getName());
}
}
}
}
}
3.2 文件过滤器改进输出指定目录下指定后缀名的文件名称案例
需求:判断D:\\develop\\images目录下是否有后缀名为.jpeg的文件,如果有,就输出此文件名称。要求:使用文件名称过滤器改进!
- public String[] list(FilenameFilter filter):
- public File[] listFiles(FilenameFilter filter):
package com.file;
import java.io.File;
import java.io.FilenameFilter;
/**
* File练习: 判断D:\\develop\\images目录下是否有后缀名为.jpeg的文件,如果有,就输出此文件名称 要求:使用文件名称过滤器改进
*
* @author HW
*
*/
public class FileTest2 {
public static void main(String[] args) {
// 创建File对象,封装D:\\develop\\images目录
File file = new File("D:\\develop\\images");
// 获取该目录下满足条件的所有文件或文件夹的名称数组
String[] fileNameArray = file.list(new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
// System.out.println(dir + "----------" + name);
// 根据一个File和一个文件/目录得到新的File对象
File newFile = new File(dir, name);
boolean flag = newFile.isFile();
boolean flag2 = name.endsWith(".jpeg");
return flag & flag2;
}
});
// 遍历文件名称数组
for (String fileName : fileNameArray) {
System.out.println(fileName);
}
}
}
带文件名称过滤器的list()方法的执行过程如下:
3.3 批量修改文件名称案例
需求:修改"D:\\develop\\批量修改文件名称"目录下的视频名称。例如:把“Java基础视频_02_我爱学Java_File类的创建功能.avi”修改为“02_File类的创建功能.avi”
package com.file;
import java.io.File;
/**
* 批量修改文件名称
*
* @author HW
*
*/
public class FileTest3 {
public static void main(String[] args) {
// 创建File对象,封装"D:\\develop\\批量修改文件名称"目录
File srcFolder = new File("D:\\develop\\批量修改文件名称");
// 获取该目录下所有文件或文件夹的File数组
File[] fileArray = srcFolder.listFiles();
// 遍历该File数组,得到每一个File对象
for (File f : fileArray) {
// 得到每个file对象的名称,例如:Java基础视频_02_我爱学Java_File类的创建功能.avi
String filename = f.getName();
// 截取字符串"01"
int startIndex = filename.indexOf("_");
String numberString = filename.substring(startIndex + 1,
startIndex + 3);
// 截取字符串"_xml语言和作用.mp4"
int endIndex = filename.lastIndexOf("_");
String nameString = filename.substring(endIndex);
// 拼接字符串
String newName = numberString.concat(nameString);
// 根据srcFolder和newName创建一个新的File对象
File newFile = new File(srcFolder, newName);
// 重命名
f.renameTo(newFile);
}
}
}
效果图如下所示: