java.io.File 类在 Java 中用于表示文件和目录。它提供了各种用于执行文件相关操作的方法,如创建文件、删除文件、检查文件属性、导航目录等等。这是 Java 中用于处理文件和目录的基本类。
1,以下是创建文件对象的基本方法
package File;
import java.io.File;
public class demo1
{
//File表示路径,可以是文件或者文件夹
//带盘符的是绝对路径,不带盘符是相对路径
/*
public File(String pathname) 根据文件路径创建文件对象
public File(String parent,String child) 根据父路径名字字符和子路径名字字符串创建文件对象
public File(File parent,String child) 根据父路径对应的文件对象和子路径名字符串创建文件对象
C:\Users\18878\Desktop
*/
public static void main(String[] args)
{
//1.根据字符串表示路径,变成file对象
String str = "C:\\Users\\18878\\Desktop\\a.txt";
File f1 = new File(str);
System.out.println(f1);//C:\Users\18878\Desktop\a.txt
//2.父级路径:C:\Users\18878\Desktop
//子级路径:a.txt
String parent = "C:\\Users\\18878\\Desktop";
String child = "a.txt";
File f2 = new File(parent,child);
System.out.println(f2);
//3.把一个File表示的路径和String表示的路径拼接
File parent2 = new File("C:\\Users\\18878\\Desktop");
String child2 = "a.txt";
File f3 = new File(parent2,child2);
System.out.println(f3);
System.out.println(f3.length());
System.out.println(f3.exists());
}
}
2,创建文件
package File;
import java.io.File;
import java.io.IOException;
public class demo2
{
//需求在当前模块下的aaa文件夹中创建一个a.txt文件
public static void main(String[] args) throws IOException
{
//1.创建a.txt父级路径
File file = new File("\\aaa");
//2.创建父级路径
file.mkdirs();//创建aaa文件夹
//3.拼接父级与子级路径
File src = new File(file,"a.txt");
boolean b = src.createNewFile();
if (b)
System.out.println("创建成功");
else
System.out.println("创建失败");
}
}
3,查找文件夹中的相关文件
package File;
import java.io.File;
public class demo3
{
//定义一个方法,找某个文件夹中是否有以avi结尾的电影
public static void main(String[] args)
{
File file = new File(".\\aaa\\bbb");
boolean haveavi = haveavi(file);
System.out.println(haveavi);
}
public static boolean haveavi(File file){
//进入aaa文件夹获取内容
File[] files = file.listFiles();//listFiles()方法将返回包含文件夹中所有文件的数组
//遍历数组获取内容
for (File file1 : files)
{
//file1表示file下的每一个文件或者文件夹
if (file1.isFile() && file1.getName().endsWith(".avi"))
return true;
}
return false;//没找到返回false
}
}
4,查找文件夹中的相关文件(考虑子文件夹)
在文件夹中有子文件夹的情况,我们很容易想到利用递归的方式,碰到文件夹就采用同样的操作,我也总结出了处理文件的万能套路。
- 套路:
- 1,进入文件夹
- 2,遍历数组
- 3,判断
- 4,判断
package File;
import java.io.File;
public class demo4
{
/*需求找到电脑中所有以avi结尾的电影(需考虑子文件夹)
*
* 套路:
* 1,进入文件夹
* 2,遍历数组
* 3,判断
* 4,判断
* */
public static void main(String[] args)
{
File src = new File("C:\\");
findAVI(src);
}
public static void findAVI(File src){
//1 进入文件夹
File[] files = src.listFiles();//如果碰有权限的文件夹会返回null
if (files != null)
//2 遍历数组,依次得到每一个内容
for (File file : files)
{
// 3判断如果是文件,执行题目业务逻辑
if(file.isFile()){
String name = file.getName();
if (name.endsWith(".avi")){
System.out.println(file.getAbsoluteFile());
}
}else{
// 4判断如果是文件夹则递归
findAVI(file);
}
}
}
}
仔细琢磨以上代码,以后碰到处理文件相关的问题,可以直接套用
5,删除一个多级文件夹
- 如果要删除一个有内容的文件夹
* 1,先删除文件夹中所有内容
* 2,再删除自己
package File;
import java.io.File;
public class demo5
{
/*
* 删除一个多级文件夹
* 如果要删除一个有内容的文件夹
* 1,先删除文件夹中所有内容
* 2,再删除自己
* */
public static void main(String[] args)
{
File file = new File(".\\aaa");
delete(file);
}
public static void delete(File file){
//先删除文件夹中的内容
//1,进入文件夹
File[] file1 = file.listFiles();
//2,遍历
for (File file2 : file1)
{
//判断如果是文件则删除
if (file2.isFile()){
//3,判断
file2.delete();
}else {
//4,判断
//判断如果是文件夹则递归
delete(file2);
}
}
file.delete();
//再删除自己
}
}
6,计算文件夹大小(考虑子文件夹)
package File;
import java.io.File;
public class demo6
{
/*
* 需求:计算文件夹大小(考虑子文件夹)
* */
public static void main(String[] args)
{
File file = new File(".\\");
long len = getLen(file);
System.out.println(len);
}
//统计一个文件夹的总大小
public static long getLen(File file){
long len = 0;
File[] files = file.listFiles();
for (File f : files)
{
if (f.isFile()){
//如果是文件把当前文件大小累加到len中
len = len + f.length();
}else {
//如果是文件夹就递归
len = len + getLen(f);//记得累加递归的结果
}
}
return len;
}
}
7,统计文件夹中各种文件的个数(包含子文件夹)
package File;
import java.io.File;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
public class demo7
{
/*
* 统计文件夹中各种文件的个数(包含子文件夹)
*
* 知识点:
* File 递归 Map集合
* */
public static void main(String[] args)
{
File file = new File(".\\");
HashMap<String, Integer> count = getCount(file);
System.out.println(count);
}
public static HashMap<String,Integer> getCount(File file){
HashMap<String,Integer> hm = new HashMap<>();
//1,进入文件夹
File[] files = file.listFiles();
//2,遍历
for (File f : files)
{
//3,判断
if(f.isFile()){
String name = f.getName();
String[] split = name.split("\\.");
if (split.length>=2){
String endName = split[split.length-1];
if (hm.containsKey(endName)){
Integer count = hm.get(endName);
count++;
hm.put(endName,count);
}else{
hm.put(endName,1);
}
}
}else {
//sunmap表示子文件夹中个数
HashMap<String, Integer> sonMap = getCount(f);//递归
//与父文件夹结果累加
Set<Map.Entry<String, Integer>> entries = sonMap.entrySet();
for (Map.Entry<String, Integer> entry : entries)
{
String key = entry.getKey();
int value = entry.getValue();
if (hm.containsKey(key)){
//存在
Integer count = hm.get(key);
count = count + value;
hm.put(key,count);
}
else{
//不存在
hm.put(key,value);
}
}
}
}
return hm;
}
}
这就是java当中对于文件的操作,记住以下套路便可得心应手
- 套路:
- 1,进入文件夹
- 2,遍历数组
- 3,判断(判断是否为文件,按照文件要求操作)
- 4,判断(判断是否为文件夹,按照文件夹要求操作)
核心代码如下:
package File;
import java.io.File;
public class demo4
{
/*需求找到电脑中所有以avi结尾的电影(需考虑子文件夹)
*
* 套路:
* 1,进入文件夹
* 2,遍历数组
* 3,判断
* 4,判断
* */
public static void main(String[] args)
{
File src = new File("C:\\");
findAVI(src);
}
public static void findAVI(File src){
//1 进入文件夹
File[] files = src.listFiles();//如果碰有权限的文件夹会返回null
if (files != null)
//2 遍历数组,依次得到每一个内容
for (File file : files)
{
// 3判断如果是文件,执行题目业务逻辑
if(file.isFile()){
String name = file.getName();
if (name.endsWith(".avi")){
System.out.println(file.getAbsoluteFile());
}
}else{
// 4判断如果是文件夹则递归
findAVI(file);
}
}
}
}