import java.io.*;
/**
* 文件工具类
*/
public class FileUtils {
/*
public static void main(String[] args) {
//删除一个文件夹下的所有文件(包括子目录内的文件) 包括路径最后的文件+也会删除 如下的5
File file = new File("D:\\doc\\rdActivities\\5");//输入要删除文件目录的绝对路径
if (deleteFile(file) == true){
System.out.println("文件删除成功!");
}
}
*/
/**
* 删除一个文件夹下的所有文件(包括子目录内的文件)
* @param file
*/
public static Boolean deleteFile(File file){
//判断文件不为null或文件目录存在
if (file == null || !file.exists()){
System.out.println("文件删除失败,请检查文件路径是否正确");
return false;
}
//取得这个目录下的所有子文件对象
File[] files = file.listFiles();
//遍历该目录下的文件对象
for (File f: files){
//打印文件名
String name = file.getName();
System.out.println(name);
//判断子目录是否存在子目录,如果是文件则删除
if (f.isDirectory()){
deleteFile(f);
}else {
f.delete();
}
}
//删除空文件夹 for循环已经把上一层节点的目录清空。
file.delete();
return true;
}
//定义一个文件目录的层级
static int level;
/*
public static void main(String[] args) {
//遍历一个文件目录下的所有的文件直至最里层
File file = new File("D:\\doc\\rdActivities\\5");//在这里更改你要遍历目录的绝对路径
parseFile(file);
}
*/
/**
* 遍历一个目录下所有的文件(包括根目录的一个程序)
* @param file
*/
public static void parseFile(File file){
//每次调用层级加1
level++;
//如果文件为null 或者文件不存在终止遍历
if (file == null || !file.exists()){
return;
}
//获得文件对象的子文件对象列表
File[] files = file.listFiles();
//遍历文件并打印文件名字
for(File f:files){
//层级缩进
for (int i = 0; i < level ; i++) {
System.out.print("\t");
}
String name = f.getName();
System.out.println(name);
//判断这些子文件是否是目录
boolean directory = f.isDirectory();
//如果是目录的话接着遍历
if (directory){
parseFile(f);
}
}
level--;
}
/**
* 根据路径判断文件是否存在
* @param baseUrl 基本路径
* @param templateType 模板类型
* @return
*/
public static Boolean checkFileIsExist(String baseUrl, Integer templateType){
Boolean returnStr = false;
//文件夹
if (checkFolder(baseUrl + templateType)) {
if (templateType == 1){
Boolean check1 = checkFile(baseUrl + templateType + "/" + "结题报告.doc");
Boolean check2 = checkFile(baseUrl + templateType + "/" + "立项报告.doc");
if (check1 == false || check2 == false){
returnStr = false;
}else {
returnStr = true;
}
}else if (templateType == 2){
Boolean check1 = checkFile(baseUrl + templateType + "/" + "立项报告.doc");
if (check1 == true){
returnStr = true;
}else {
returnStr = false;
}
}else if (templateType == 3){
Boolean check1 = checkFile(baseUrl + templateType + "/" + "立项结题报告.doc");
Boolean check2 = checkFile(baseUrl + templateType + "/" + "立项结题报告书.doc");
if (check1 == false || check2 == false){
returnStr = false;
}else {
returnStr = true;
}
}else if (templateType == 4){
Boolean check1 = checkFile(baseUrl + templateType + "/" + "立项+结题.doc");
if (check1 == true){
returnStr = true;
}else {
returnStr = false;
}
}
}else {
//文件夹不存在
returnStr = false;
}
return returnStr;
}
/**
* 判断文件是否存在,针对研发活动情况文件
* @param url
* @return
*/
private static Boolean checkFile(String url){
//文件
File file = new File(url);
if (!file.exists()){
//文件不存在
return false;
}else {
return true;
}
}
/**
* 判断文件夹是否存在
* @param url
* @return
*/
private static Boolean checkFolder(String url){
//文件夹
File folder = new File(url);
if (!folder.exists() && !folder.isDirectory()) {
//文件夹不存在
return false;
}else {
return true;
}
}
/**
* 把文件夹含里面的全部文件复制到指定的路径
* 写入的时候会把文件夹也写进去
* @param srcDir 被复制的文件夹路径
* @param destDir 复制到的路径
* @throws IOException
*/
public static void copyDir(File srcDir, File destDir) throws IOException {
// 因为 是文件夹才递归,文件的话 是直接复制(write操作)不回去调用递归,
// 所以 两个File类参数:srcDir和destDir都是文件夹
//第一步:先把srcDir这个文件夹,复制过去
//新增的文件夹的path=destDir文件夹绝对路径+srcDir文件名
File newDir = new File(destDir.getAbsolutePath() + "/" + srcDir.getName());
newDir.mkdirs();//创建文件夹
//对源文件夹进行listFiles()操作,并逐一判断
File[] subFiles = srcDir.listFiles();
for (File tempFile : subFiles) {
//如果是文件夹,递归之,其中srcDir更新为当前的tempFile,destDir更新为newDir
if (!tempFile.isFile()) {
copyDir(tempFile, newDir);
//是文件,就复制文件(read+write)
}else{
//是文件,就复制文件(read+write)
InputStream is = new FileInputStream(tempFile);
OutputStream os = new FileOutputStream(newDir + "/" + tempFile.getName());
byte[] car = new byte[10000];
int len = 0;
while (-1 != (len = is.read(car)))
os.write(car, 0, len);
is.close();
os.flush();
os.close();
}
}
}
}