# File的概述和构造方法
File类是表示文件或目录的对象,是文件和目录路径名的抽象表示形式。
# File类中的方法
三种不同参数的构造方法
| 方法名称 | 说明 |
|---|---|
public File(String pathname) | 根据一个文件路径创建一个File对象 |
public File(String parent, String child) | 根据父路径字符串和子路径名创建一个File对象 |
public File(File parent, String child) | 根据父路径File对象和子路径名字符串创建一个File |
package File;
import java.io.File;
public class Main {
public static void main(String[] args) {
//文件对象
//1.根据文件路径创建文件对象(根据字符串表示的路劲,变成File对象)
String Url = "E:\\desktop\\新建文本文档.text";
File file = new File(Url);
System.out.println(file);
//2.根据父路径字符串和子路径名创建一个`File`对象
//父级路径 E:\desktop
//子级路径 新建文本文档.text
String parentUrl = "E:\\desktop";
String childName = "新建文本文档.text";
File file1 = new File(parentUrl, childName);
System.out.println(file1);
//在java中\叫转义字符,因此路径需要使用\\表示一个\
//在不同的操作系统中,\的含义不同,在windows中表示路径分隔符,因此不建议我们自己来拼接路径
File url1 = new File(parentUrl + "\\" + childName);
System.out.println(url1);
//3。讲一个File表示的路径和一个字符串表示的路径进行拼接
File parentUrl1 = new File("E:\\desktop");
String childName1 = "新建文本文档.text";
File url2 = new File(parentUrl1, childName1);
System.out.println(url2);
}
}
# File类中常见的成员方法(判断、获取)
# 判断和获取相关的方法
| 方法名称 | 说明 |
|---|---|
public boolean isDirectory() | 判断此路径名表示的File是否为文件夹 |
public boolean isFile() | 判断此路径名表示的File是否为文件 |
public boolean exists() | 判断此路径名表示的File是否存在 |
public long length() | 返回文件的大小(字节数量) |
public String getAbsolutePath() | 返回此路径名的绝对路径名字符串 |
public String getPath() | 返回定义文件时使用的路径 |
public String getName() | 返回此路径名表示的File的文件名(带后缀) |
public long lastModified() | 返回文件最后的呢修改时间 |
package File;
import java.io.File;
import java.text.SimpleDateFormat;
public class Main {
public static void main(String[] args) {
//文件对象
//1.根据文件路径创建文件对象(根据字符串表示的路劲,变成File对象)
String Url = "E:\\desktop\\a.txt";
File file = new File(Url);
System.out.println(file);
//2.根据父路径字符串和子路径名创建一个`File`对象
//父级路径 E:\desktop
//子级路径 新建文本文档.txt
String parentUrl = "E:\\desktop";
String childName = "新建文本文档.txt";
File file1 = new File(parentUrl, childName);
System.out.println(file1);
//在java中\叫转义字符,因此路径需要使用\\表示一个\
//在不同的操作系统中,\的含义不同,在windows中表示路径分隔符,因此不建议我们自己来拼接路径
File url1 = new File(parentUrl + "\\" + childName);
System.out.println(url1);
//3。讲一个File表示的路径和一个字符串表示的路径进行拼接
File parentUrl1 = new File("E:\\desktop");
String childName1 = "新建文本文档.txt";
File url2 = new File(parentUrl1, childName1);
System.out.println(url2);
//使用相对路径获取file对象
File file2 = new File("java-first\\a.txt");
System.out.println(file2);
System.out.println(file2.exists());
//FIle对象中的成员方法
//1.判断此路径名表示的File是否为文件夹 isDirectory()
System.out.println(file.isDirectory());
//2.判断此路径名表示的File是否为文件 isFile()
System.out.println(file.isFile());
//3.判断此路径名表示的File是否存在 exists()
System.out.println(file.exists());
//4.返回文件的大小
//注:;这个方法只能获取文件的大小,单位是字节,如果文件的单位是M可以不断的除以1024
//这个方法无法获取文件夹的大小,需要把这个文件夹中的所有文件都累加在一起
System.out.println(file.length());
//5.返回此路径名的绝对路径名字符串
System.out.println(file.getAbsolutePath());
//6.返回定义文件时使用的字符串
System.out.println(file.getPath());
//7.返回文件名 带后缀
System.out.println(file.getName());
//8.返回文件的最后修改时间
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
System.out.println(simpleDateFormat.format(file.lastModified()));
}
}
# 创建、删除的方法
| 方法名称 | 说明 |
|---|---|
public boolean createNewFile() | 创建一个文件,如果文件已经存在,则不创建,返回false,如果文件不存在,则创建,返回true |
public boolean delete() | 删除此路径名表示的File,如果删除的是文件夹则需要判断文件夹中是否有文件,如果有文件则删除不成功 (不走回收站) |
public boolean mkdir() | 创建单级文件夹,如果文件夹已经存在,则不创建,返回false,如果文件夹不存在,则创建,返回true |
public boolean mkdirs() | 创建多级文件夹,如果文件夹已经存在,则不创建,返回false,如果文件夹不存在,则创建,返回true |
package File;
import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
public class Main {
public static void main(String[] args) throws IOException {
//创建删除的方法
// 1.创建一个新的空文件
//如果文件路劲不存在则会抛出IOException异常
//创建的一定是文件 如果路径中未写文件名则会创建一个没有后缀的文件
File file3 = new File("attrs\\file\\a.txt");
boolean newFile = file3.createNewFile();
System.out.println(newFile);
//2.创建文件夹
//如果路劲中存在同名的文件或文件夹则创建不成功
//mkdir只能创建单级文件夹
File file4 = new File("attrs\\file\\newFile");
boolean mkdir = file4.mkdir();
System.out.println(mkdir);
//创建多级文件夹
//可以创建单级和多级文件夹
File file5 = new File("attrs\\file\\newFile\\newFile1\\newFile2");
boolean mkdirs = file5.mkdirs();
System.out.println(mkdirs);
//3.删除文件或空文件夹
//如果删除的是文件则直接删除不走回收站
//如果删除的是文件夹则需要判断文件夹中是否有文件,如果有文件则删除不成功 如果没有文件则直接删除 不走回收站
File file6 = new File("attrs\\file\\newFile\\newFile1\\newFile2");
boolean delete = file6.delete();
System.out.println(delete);
}
}
# 获取并遍历
| 方法名称 | 说明 |
|---|---|
重点掌握public File[] listFiles() | 获取此路径名表示的File的文件和文件夹(所有内容),返回一个File数组 |
public String[] list() | 获取此路径名表示的File的文件和文件夹(所有内容),返回一个String数组 |
public String[] list(FilenameFilter filter) | 利用文件名过滤器获取当前路径下的所有内容 |
public static File[] listRoots() | 列出可用的文件系统根 |
package File;
import java.io.File;
public class Main {
public static void main(String[] args) {
//文件过滤
//需求获取文件夹下的所有txt文件
File file9 = new File("attrs\\file");
File[] listFiles = file9.listFiles(s -> s.getName().endsWith(".txt"));
System.out.println(Arrays.toString(listFiles));
//1.listRoots 获取系统中所有的盘符
File[] listRoots = File.listRoots();
System.out.println(Arrays.toString(listRoots));//[C:\, D:\, E:\, F:\]
//2.list 获取路径下的所有文件(字符串名字)
File file8 = new File("attrs\\file");
String[] list1 = file8.list();
System.out.println(Arrays.toString(list1));//[a.txt, newFile]
//3.list(filename filter) 利用文件名过滤器获取当前路径下的所有内容
//需求获取文件夹下的所有txt文件
File file10 = new File("attrs\\file");
//dir 父级路径
//s 子级路径
String[] list2 = file10.list((dir, s) -> new File(dir, s).getName().endsWith(".txt"));
System.out.println(Arrays.toString(list2));
}
}
# 文件练习
package File;
public class Main {
public static void main(String[] args) {
//综合练习
//1.需求 在当前模块下的aaa文件夹中创建一个a.txt文件
File file11 = new File("attrs\\a.txt");
try {
boolean newFile1 = file11.createNewFile();
System.out.println(newFile1);
} catch (IOException e) {
System.out.println("文件创建失败");
}
//2.需求 定义一个方法找某一个文件夹中是否有 暂时不需要考虑子文件夹
File file12 = new File("attrs\\file");
File[] listFiles1 = file12.listFiles(s -> s.getName().endsWith(".txt"));
if (listFiles1 != null) {
System.out.println(Arrays.toString(listFiles1));
}
//获取更目录非txt文件
File file13 = new File("E:\\");
File[] listFiles2 = file13.listFiles(s -> !s.getName().endsWith(".txt"));
if (listFiles2 != null) {
System.out.println(Arrays.toString(listFiles2));
}
//3.需求 定义一个方法找某一个文件夹中是否有.txt结尾的文件 (需要考虑子文件夹)
File file14 = new File("E:\\desktop\\小程序移动医保测试");
File[] files = file14.listFiles();
File[] fileTxt = getFileTxt(files);
System.out.println(Arrays.toString(fileTxt));
//4.需求 删除一个多级文件夹
File file15 = new File("attrs\\deleteFileText\\newFile1\\newFile2");
System.out.println("删除结果" + file15);
boolean mkdirs1 = file15.mkdirs();
System.out.println("创建结果" + mkdirs1);
File file16 = new File("attrs\\deleteFileText");
deleteFile(file16);
//5.统计文件夹中文件出现的个数
File file17 = new File("E:\\desktop\\小程序移动医保测试");
Map<String, Integer> map = getFileGroup(files);
System.out.println(map);
//6.获取文件夹的总大小
File file18 = new File("E:\\desktop\\小程序移动医保测试");
long fileSize = getFileSize(file18);
System.out.println("文件夹总大小为" + fileSize / (1024) / 1024 + "M");
}
//删除某个文件夹中的所有内容(包含文件或文件夹)
public static void deleteFile(File file) {
File[] files = file.listFiles();
System.out.println("文件" + Arrays.toString(files));
if (files == null) return;
else if (files.length > 0) {
for (File fileItem : files) {
if (fileItem.isDirectory()) {
deleteFile(fileItem);
} else {
boolean delete = fileItem.delete();
System.out.println(fileItem.getName() + "......" + delete);
}
;
}
file.delete();
}
}
//统计一个文件夹的总大小
public static long getFileSize(File file) {
long size = 0;
File[] files = file.listFiles();
if (files == null) return 0;
for (File file1 : files) {
if (file1.isDirectory()) size += getFileSize(file1);
else size += file1.length();
}
return size;
}
//数组分组
public static Map<String, Integer> getFileGroup(File[] files) {
File[] flies = getFiles(files);
Map<String, Integer> map = new HashMap<>();
for (File file : flies) {
//获取文件后缀名
String[] splitList = file.getName().split("\\.");
String s = splitList[splitList.length - 1];
if (map.containsKey(s)) map.put(s, map.get(s) + 1);
else map.put(s, 1);
}
return map;
}
//获取目录中所有的文件(不包含文件夹)
public static File[] getFiles(File[] files) {
if (files == null) return new File[0];
ArrayList<File> fileArrayList = new ArrayList<>();
for (File file : files) {
if (!file.exists()) continue;
else if (file.isDirectory()) {
Collections.addAll(fileArrayList, getFiles(file.listFiles()));
} else if (file.isFile()) {
fileArrayList.add(file);
}
}
return fileArrayList.toArray(new File[0]);
}
//获取目录中所有的txt文件 包含子文件夹
public static File[] getFileTxt(File[] files) {
if (files == null) return new File[0];
ArrayList<File> fileArrayList = new ArrayList<>();
for (File file : files) {
if (file.isDirectory())
Collections.addAll(fileArrayList, getFileTxt(file.listFiles()));
else if (file.isFile() && file.getName().endsWith(".txt"))
fileArrayList.add(file);
}
return fileArrayList.toArray(new File[0]);
}
}