File功能
1.创建文件、目录
2.删除文件、目录
3.获取文件/目录的一些属性信息:大小、最后修改日期、文件名等。
相对路径和绝对路径
1.相对路径:相对路径就是相对于当前文件的路径。
2.绝对路径:绝对路径就是硬盘上的真正路径。
package MONA.demo01_file类;
import java.io.File;
import java.io.IOException;
/**
* file类的创建和删除
*/
public class Demo02 {
public static void main(String[] args) throws IOException {
// //当前项目根目录
// File file = new File("demo.txt");
//
// //createNewFile() 创建文件,返回是否创建成功,文件如果存在,那么不会创建
// System.out.println("创建文件:"+file.createNewFile());
//
// File file2 = new File("aaa");
// //mkdir() 创建文件夹,返回是否创建成功
// System.out.println("创建文件夹:"+file2.mkdir());
//
// File file3 = new File("bbb\\ccc");
// //mkdirs() 创建多级目录,返回是否成功
// System.out.println("创建多级文件夹"+file3.mkdirs());
//删除
File file = new File("demo.txt");
//删除文件/文件夹
System.out.println("删除文件"+file.delete());
File file2 = new File("aaa");
System.out.println("删除目录:"+file2.delete());
File file3 = new File("bbb\\ccc");
System.out.println("删除多级目录:"+file3.delete());
//只能删除空的文件夹
}
}
File类重命名功能(目标文件为被操作的文件)
如果目标文件和原文件不在同目录下,重命名操作将会相当于“剪切”操作。
如果目标文件和原文件在同目录下,相当于“重命名”。
package MONA.demo02_file类;
import java.io.File;
/**
* 重命名功能
*/
public class Demo03 {
public static void main(String[] args) {
File file1 = new File("bbb\\2.txt");
File newFile = new File("1.txt");
System.out.println(file1.renameTo(newFile));
}
}
File判断功能
package MONA.demo02_file类;
import java.io.File;
/**
*判断的功能
*/
public class Demo04 {
public static void main(String[] args) {
File file1 = new File("D:\\湖北省");
System.out.println("是否是文件夹"+file1.isDirectory());
File file2 = new File("D:\\湖北省\\长江大学");
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());
}
}
File获取文件的基本信息
package MONA.demo02_file类;
import java.io.File;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
* File获取的功能
*/
public class Demo05 {
public static void main(String[] args) {
File file1 = new File("D:\\湖北省\\长江大学");
//获取文件名称
System.out.println("获取文件名称:"+file1.getName());
//获取文件路径
System.out.println("获取文件路径:"+file1.getPath());
//获取抽象路径
System.out.println("获取抽象路径:"+file1.getAbsolutePath());
//获取文件大小
System.out.println("获取文件大小:"+file1.length());
//获取最后修改的时间
System.out.println("获取最后修改时间:"+file1.lastModified());
Date date = new Date(file1.lastModified());
//System.out.println(date.toLocaleString());
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String dateStr = sdf.format(date);
System.out.println(dateStr);
}
}
注意:在获取指定目录下的文件或者文件夹时必须满足下面两个条件
1.指定的目录必须是存在的
2.指定的必须是目录。否则容易引发返回数组的null,出现NullPointerException.
package MONA.demo03_file批量获取;
import java.io.File;
/**
* 批量获取的方法
*/
public class Demo01 {
public static void main(String[] args) {
//第一种,返回的是文件字符串
File file1 = new File("D:\\湖北省");
String[] files = file1.list();
for (String s : files) {
System.out.println(s);
}
//第二种
File[] files2 = file1.listFiles();
for (File f : files2) {
if (f.isFile()){
System.out.println("是文件"+f.getName());
}else{
System.out.println("是文件夹:"+f.getName());
}
}
}
}
文件名称过滤器
package MONA.demo04_过滤器;
import java.io.File;
import java.io.FilenameFilter;
/**
* 文件名称过滤器
*/
public class Demo01 {
public static void main(String[] args) {
File file = new File("D:\\doc");
//要求:获取test目录下以".txt"为后缀的文件
//不用过滤器
//1.获取目录下所有的文件
//2.遍历数组,判断是否是文件,获取文件名判断结尾
File[] files1 = file.listFiles();
for (File f : files1) {
if(f.isFile() && f.getName().endsWith(".txt")){
System.out.println(f.getAbsolutePath());
}
}
System.out.println("=================================================");
//过滤器
//FilenameFilter 接口
FilenameFilter filter = new FilenameFilter() {
/**
*
* @param dir 文件所在的文件夹
* @param name 文件名称
* @return
*/
@Override
public boolean accept(File dir, String name) {
// System.out.println("dir="+dir.getName());
// System.out.println("name="+name);
//根据文件名称判断
if(name.endsWith(".txt"))
return true;
//如果返回true,就将此文件添加到数组中
return false;
}
};
File[] files2 = file.listFiles(filter);
for (File f : files2) {
System.out.println(f.getAbsolutePath());
}
}
}
文件过滤器
package MONA.demo04_过滤器;
import java.io.File;
import java.io.FileFilter;
/**
* 文件过滤器
* 获取目录所有的文件夹
*/
public class Demo02 {
public static void main(String[] args) {
File file = new File("D:\\doc");
MyFileFilter myFileFilter = new MyFileFilter();
File[] files = file.listFiles(myFileFilter);
for (File f : files) {
System.out.println(f.getAbsolutePath());
}
// //匿名内部类
// FileFilter fileFilter = new FileFilter(){
//
// @Override
// public boolean accept(File pathname) {
// return false;
// }
// };
// file.listFiles(fileFilter);
}
}
class MyFileFilter implements FileFilter{
@Override
public boolean accept(File pathname) {
//System.out.println("pathname"+pathname.getAbsolutePath());
return pathname.isDirectory();
}
}
输出指定目录下指定后缀名的文件名称(当前目录)
package MONA.demo05_练习题;
import java.io.File;
import java.io.FileFilter;
/*
输出指定目录下指定后缀名的文件名称(当前目录)
*/
public class Demo01 {
public static void main(String[] args) {
File file = new File("D:\\doc");
File[] files = file.listFiles(new FileFilter() {
@Override
public boolean accept(File pathname) {
return pathname.isFile() && pathname.getName().endsWith(".txt");
}
});
for (File f : files) {
System.out.println(f.getAbsolutePath());
}
}
}
输出指定目录下指定后缀名的文件名称(多层目录)
package MONA.demo05_练习题;
import java.io.File;
import java.io.FileFilter;
/*
输出指定目录下指定后缀名的文件名称(多层目录)
*/
public class Demo02 {
public static void main(String[] args) {
File file = new File("D:\\doc");
listFiles(file);
}
//打印所有文件的方法
public static void listFiles(File file){
//获取所有的文件、文件夹列表
File[] files = file.listFiles();
if(files != null){
//判断是否是文件
for (File f : files) {
//判断后缀名
if(f.isFile()){
if(f.getName().endsWith(".txt")){
System.out.println(f.getAbsolutePath());
}
}else{
//如果是目录,继续遍历
listFiles(f);
}
}
}
}
}
运用递归做相关File的操作
1.删除指定目录下的所有文件
package MONA.demo06_递归;
import java.io.File;
/**
* 删除指定目录下的所有文件
* 1.File delete() 可以删除文件夹或目录,但是文件夹只能是空的文件夹
* 2.遍历文件夹,先删除文件夹里面的文件,然后删除文件夹
* 思路:
* 封装路径为File对象
* 判断File是否为空
* 判断File是否是文件
* 是文件:直接删除
* 不是文件:获取文件夹里面所有的文件列表,并遍历
*/
public class Demo02 {
public static void main(String[] args) {
File file = new File("D:\\doc");
deleteFile(file);
}
public static void deleteFile(File file){
if(file == null){
return;
}
if(file.isFile()){
file.delete();//删除文件
}else{
File[] files = file.listFiles();
for (File f : files) {
deleteFile(f);
}
//删除目录
file.delete();
}
}
}
2.打印所有子目录中的文件路径
package MONA.demo06_递归;
import java.io.File;
/**
* 打印所有子目录中的文件路径
*/
public class Demo03 {
public static void main(String[] args) {
File file = new File("D:\\doc");
printFile(file);
}
public static void printFile(File file){
if(file.isFile()){
System.out.println("文件路径:"+file.getAbsolutePath());
}else{
File[] files = file.listFiles();
for (File f : files) {
printFile(f);
}
}
}
}