该file文件操作工具类实现功能包括:文件的增删改查,移动文件,文件内容的读取,较大的特点是通过反射获取包下所有类。后面做了简单测试验证以及一些反射相关知识补充。
一)简单文件操作:增删改查
import java.io.BufferedReader;
import java.io.File;
import java.io.FileFilter;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.net.JarURLConnection;
import java.net.URL;
import java.net.URLDecoder;
import java.util.Enumeration;
import java.util.LinkedHashSet;
import java.util.Set;
import java.util.jar.JarEntry;
import java.util.jar.JarFile;
/**
*文件操作工具类
*
* @author xiu
* @version 2017年7月31日 下午8:17:13
*/
public class FileUtil {
private FileUtil() {
}
/**
* 列出指定文件夹的内容
*
* @param dir 指定文件夹的路径
* @return 指定文件夹的内容
*/
public static String[] ls(String dir) {
File file = new File(dir);
if (file.exists()) {
return file.list();
}
return new String[0];
}
/**
* 在指定的位置创建指定的文件
*
* @param filePath 完整的文件路径
* @param mkdir 是否创建相关的文件夹
* @throws Exception
*/
public static void mkFile(String filePath, boolean mkdir) throws Exception {
File file = new File(filePath);
file.getParentFile().mkdirs();
file.createNewFile();
file = null;
}
/**
* 在指定的位置创建文件夹
*
* @param dirPath 文件夹路径
* @return 若创建成功,则返回True;反之,则返回False
*/
public static boolean mkDir(String dirPath) {
return new File(dirPath).mkdirs();
}
/**
* 写入文件(完全自定义文件格式和写入内容)
*
* @param filename 文件名(可包含路径)
* @param data 要写入的数据
* @param flag 是否追加(true追加,false不追加)
* @return boolean
*/
public static boolean write(String filename, String data, boolean flag) {
int i = filename.lastIndexOf('/');
File file = new File(filename.substring(0, i));
if (!file.exists()) {
file.mkdirs();
}
try {
FileWriter fw = new FileWriter(filename, flag);
fw.write(data);
fw.flush();
fw.close();
} catch (IOException e) {
e.printStackTrace();
return false;
}
return true;
}
/**
* 删除某个文件或目录 2012-3-13
*
* @param filename
* 文件名或目录
* @return 0:删除成功,-1:指定文件夹不存在,-2:指定文件不存在
*/
public static int delete(String filename) {
File file = new File(filename);
if (file.isDirectory()) {
String[] dir = ls(filename);
for (int i = 0; i < dir.length; i++) {
new File(filename + "/" + dir[i]).delete();
if (file.isDirectory()) {
delete(filename + "/" + dir[i]);
}
}
if (file.delete()) {
return 0;
} else {
return -1;
}
} else if (file.isFile()) {
if (file.delete()) {
return 0;
} else {
return -2;
}
} else {
return -1;
}
}
/**
* 移动指定的文件(夹)到目标文件(夹)
* @param source 源文件(夹)
* @param target 目标文件(夹)
* @param isFolder 若为文件夹,则为True;反之为False
* @return
* @throws Exception
*/
public static boolean move(String source, String target, boolean isFolder)
throws Exception {
copy(source, target, isFolder);
if (isFolder) {
return delDir(source, true);
} else {
return delFile(source);
}
}
/**
* 删除指定的文件
*
* @param filePath 文件路径
*
* @return 若删除成功,则返回True;反之,则返回False
*
*/
public static boolean delFile(String filePath) {
return new File(filePath).delete();
}
/**
* 删除指定的文件夹
*
* @param dirPath 文件夹路径
* @param delFile 文件夹中是否包含文件
* @return 若删除成功,则返回True;反之,则返回False
*
*/
public static boolean delDir(String dirPath, boolean delFile) {
if (delFile) {