一.File类
1.File类的特点
文件和文件目录路径的抽象表示形式,与平台无关
File 能新建、删除、重命名文件和目录,但 File 不能访问文件内容本身。
如果需要访问文件内容本身,则需要使用输入/输出流。
想要在Java程序中表示一个真实存在的文件或目录,那么必须有一个File对 象,但是Java程序中的一个File对象,可能没有一个真实存在的文件或目录。
File对象可以作为参数传递给流的构造器
2.File类的构造方法
3.File类的使用
因为windows和UNIX路径之间的分割符号不一样,但是java是跨平台的,所以java提供了一个常量public static final String separator。来解决这个问题
4.File类的常用方法
5.例子
package utils;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
public class FileUtils {
/**
*
* @author Antg
* @date 2021年6月30日
* @param null
* @retun null
* @Description 创建文件及文件夹
*/
public static void createFile() throws IOException {
File f1 = new File("./src/a/b1/c1");
File f2 = new File("./src/a/b1/c2");
File f3 = new File("./src/a/b2/c1");
File f4 = new File("./src/a/b2/c2");
File f5 = new File("./src/a/b1.jpg");
File f6 = new File("./src/a/b2.txt");
File f7 = new File("./src/a/b1/c2/c2.jpg");
f1.mkdirs();
f2.mkdirs();
f3.mkdirs();
f4.mkdirs();
f5.createNewFile();
f6.createNewFile();
f7.createNewFile();
}
/**
*
* @author Antg
* @date 2021年6月30日
* @param file
* 要删除的文件
* @retun boolean 是否删除成功
* @Description 删除一个文件或文件夹 思路: 递归删除 首先获取这个文件下的所有子文件和目录 如果是文件 那么删除如果是目录递归这个方法
*/
public static boolean delFile(File file) {
// 校验文件是否存在
if (file == null || !file.exists()) {
System.out.println("文件不存在");
return false;
}
// 如果是一个文件直接删除
if (file.isFile()) {
return file.delete();
} else {
// 如果是一个目录,则先删除它下面的所有,然后再将该文件夹删除
if (file.listFiles().length == 0) {
// 如果是空目录则直接删除
file.delete();
return true;
}
// 如果不是空目录,则遍历
for (File f : file.listFiles()) {
if (f.isFile()) {
f.delete();
} else if (f.isDirectory()) {
delFile(f);
}
}
// 遍历完后将该目录删除
return file.delete();
}
}
/**
*
* @author Antg
* @date 2021年6月30日
* @param file
* 要操作的文件
* @retun ArrayList<File> 返回一个文件list
* @Description 获取该文件夹下的所有子文件和目录
*/
public static ArrayList<File> getFileList(File file) {
// 校验文件是否存在
if (file == null || !file.exists()) {
System.out.println("文件不存在");
return null;
}
ArrayList<File> fileList = new ArrayList<File>();
if (file.isFile()) {
fileList.add(file);
} else {
for (File f : file.listFiles()) {
if (f.isFile()) {
fileList.add(f);
} else if (f.isDirectory()) {
fileList.add(f);
fileList.addAll(getFileList(f));
}
}
}
return fileList;
}
/**
*
* @author Antg
* @date 2021年6月30日
* @param file 要操作的文件
* @retun size 文件大小(字节)
* @Description 获取指定目录的占用空间的大小(以字节为单位)
*/
public static long getFileSize(File file) {
// 校验文件是否存在
if (file == null || !file.exists()) {
System.out.println("文件不存在");
return 0L;
}
if(file.isFile()){
return file.length();
}else if(file.isDirectory()){
long size = 0L;
for(File f:file.listFiles()){
size+=getFileSize(f);
}
return size;
}else{
System.out.println("其他错误");
return 0L;
}
}
}
二.Properties类
1.概述
该类专门用于读取以".properties"为后缀的文件,该类文件中存储着格式为key=value的键值对,多用于配置文件
2.代码实现
package utils;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.Properties;
public class ReadConfig {
private static Properties properties = new Properties();
private static BufferedReader br;
/**
*
* @author Antg
* @date 2021年7月6日
* @param 要获取的属性
* @retun 获取的属性值
* @Description 读取properties的数据
*/
public static String getConfig(String key){
try {
//配置文件路径
String config = "resource/config/conf.properties";
//创建缓存流来读取文件
br = new BufferedReader(new FileReader(config));
//将流的信息加载到properties对象
properties.load(br);
//获取key对于的值
return properties.get(key).toString();
} catch (Exception e) {
e.printStackTrace();
return null;
}finally{
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}