java 对文件夹(文件)进行复制,新建,删除,等工具类

package com.utils;

import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.CharArrayWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.nio.file.FileVisitResult;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.SimpleFileVisitor;
import java.nio.file.attribute.BasicFileAttributes;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;

public class FilesUtils {
	/**
	 * 修改文件夹名称
	 * 
	 * @param fname
	 * @param targetName
	 */
	@SuppressWarnings("unused")
	public static boolean renameFile(String fname, String targetName) {
		File file = new File(fname);
		if (!(file == null)) {
			File newFile = new File(targetName);
			file.renameTo(newFile);
		} else {
			return false;
		}
		return true;
	}

	/**
	 * 复制文件
	 * 
	 * @param srcFolder
	 *            源文件
	 * @param destFolder
	 *            目标文件
	 * @throws IOException
	 */
	public static boolean copyFolder(String srcFolder, String destFolder) throws IOException {
		final Path srcPath = Paths.get(srcFolder);
		// 这里多创建一级,就解决了没有外壳的问题
		final Path destPath = Paths.get(destFolder, srcPath.toFile().getName());
		// 检查源文件夹是否存在
		if (Files.notExists(srcPath)) {
			System.exit(1);
			return false;
		}

		// 如果目标目录不存在,则创建
		if (Files.notExists(Paths.get(destFolder))) {
			Files.createDirectories(Paths.get(destFolder));
		}
		Files.walkFileTree(srcPath, new SimpleFileVisitor<Path>() {
			@Override
			// 文件处理,将文件夹也一并处理,简洁些
			public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
				Path dest = destPath.resolve(srcPath.relativize(file));
				// 如果说父路径不存在,则创建
				if (Files.notExists(dest.getParent())) {
					Files.createDirectories(dest.getParent());
				}
				Files.copy(file, dest);
				return FileVisitResult.CONTINUE;
			}
		});
		return true;
	}

	/**
	 * 删除文件,可以是单个文件或文件夹
	 * 
	 * @param fileName
	 *            待删除的文件名
	 * @return 文件删除成功返回true,否则返回false
	 */
	public static boolean delete(String fileName) {
		File file = new File(fileName);
		if (!file.exists()) {
			return false;
		} else {
			if (file.isFile()) {
				return deleteFile(fileName);
			} else {
				return deleteDirectory(fileName);
			}
		}
	}

	/**
	 * 删除单个文件
	 * 
	 * @param fileName
	 *            被删除文件的文件名
	 * @return 单个文件删除成功返回true,否则返回false
	 */
	public static boolean deleteFile(String fileName) {
		File file = new File(fileName);
		if (file.isFile() && file.exists()) {
			file.delete();
			return true;
		} else {
			return false;
		}
	}

	/**
	 * 删除目录(文件夹)以及目录下的文件
	 * 
	 * @param dir
	 *            被删除目录的文件路径
	 * @return 目录删除成功返回true,否则返回false
	 */
	public static boolean deleteDirectory(String dir) {
		// 如果dir不以文件分隔符结尾,自动添加文件分隔符
		if (!dir.endsWith(File.separator)) {
			dir = dir + File.separator;
		}
		File dirFile = new File(dir);
		// 如果dir对应的文件不存在,或者不是一个目录,则退出
		if (!dirFile.exists() || !dirFile.isDirectory()) {
			return false;
		}
		boolean flag = true;
		// 删除文件夹下的所有文件(包括子目录)
		File[] files = dirFile.listFiles();
		for (int i = 0; i < files.length; i++) {
			// 删除子文件
			if (files[i].isFile()) {
				flag = deleteFile(files[i].getAbsolutePath());
				if (!flag) {
					break;
				}
			}
			// 删除子目录
			else {
				flag = deleteDirectory(files[i].getAbsolutePath());
				if (!flag) {
					break;
				}
			}
		}

		if (!flag) {
			return false;
		}

		// 删除当前目录
		if (dirFile.delete()) {
			return true;
		} else {
			return false;
		}
	}

	/**
	 * 创建文件夹
	 * 
	 * @param address
	 * @param folderName
	 */
	public static void createFolder(String address, String folderName) {
		File file = new File(address);
		if (!(file == null)) {
			File newFile = new File(file.getPath() + "\\" + folderName);
			if (newFile.mkdirs()) {
			} else {
			}
		}
	}

	/**
	 * 替换文本文件中的符串
	 * 
	 * @param path
	 * @throws IOException
	 */
	public static boolean replacTextContent(String path, String srcStr, String replaceStr) {
		try {
			// 读
			File file = new File(path);
			FileReader in = new FileReader(file);
			BufferedReader bufIn = new BufferedReader(in);
			// 内存流, 作为临时流
			CharArrayWriter tempStream = new CharArrayWriter();
			// 替换
			String line = null;
			while ((line = bufIn.readLine()) != null) {
				// 替换每行中, 符合条件的字符串
				line = line.replaceAll(srcStr, replaceStr);
				// 将该行写入内存
				tempStream.write(line);
				// 添加换行符
				tempStream.append(System.getProperty("line.separator"));
			}
			// 关闭 输入流
			bufIn.close();
			// 将内存中的流 写入 文件
			FileWriter out = new FileWriter(file);
			tempStream.writeTo(out);
			in.close();
			bufIn.close();
			tempStream.close();
			out.close();
		} catch (FileNotFoundException e) {
			// TODO 自动生成的 catch 块
			return false;
		} catch (IOException e) {
			// TODO 自动生成的 catch 块
			return false;
		}
		return true;
	}

	/**
	 * FilePath为文件路径
	 * 
	 * @param FilePath
	 * @param str1
	 *            将str1替换为str1
	 * @param str2
	 * @return
	 */
	public static boolean changeTxtContent(String FilePath, String str1, String str2) {
		try {
			File file = new File(FilePath);
			String code = getFileCharacterEnding(file);// 获取文件编码
			InputStreamReader read = new InputStreamReader(new FileInputStream(file), code);
			BufferedReader bufferedReader = new BufferedReader(read);
			String TxtBuff = null;
			StringBuffer out = new StringBuffer();
			while ((TxtBuff = bufferedReader.readLine()) != null) {
				TxtBuff = TxtBuff.replace(str1, str2);
				out.append(TxtBuff);
				out.append("\r\n");
			}
			read.close();
			FileOutputStream outputstream = null;
			outputstream = new FileOutputStream(file);
			outputstream.write(out.toString().getBytes(code));
			bufferedReader.close();
			outputstream.close();
		} catch (Exception e) {
			// TODO 自动生成的 catch 块
			return false;
		}
		return true;
	}

	public static String getFileCharacterEnding(File file) throws Exception {
		InputStream inputStream = new FileInputStream(file);
		byte[] head = new byte[3];
		inputStream.read(head);
		String code = "gbk";
		if (head[0] == -1 && head[1] == -2) {
			code = "UTF-16";
		}
		if (head[0] == -2 && head[1] == -1) {
			code = "Unicode";
		}
		if (head[0] == -17 && head[1] == -69 && head[2] == -65) {
			code = "UTF-8";
		}
		try {
			inputStream.close();
		} catch (Exception e) {
		}
		return code;
	}

	/**
	 * 
	 * @return 获取文件配置参数
	 * @throws UnsupportedEncodingException
	 * @throws IOException
	 */
	public static Map<String, String> getProperties(String path) throws UnsupportedEncodingException, IOException {
		Map<String, String> dataMess = new HashMap<>();
		Properties properties = new Properties();
		InputStream in = new BufferedInputStream(new FileInputStream(path + "sysconfig/MysqlDB.properties"));
		properties.load(new InputStreamReader(in, "utf-8"));
		dataMess.put("sF", properties.getProperty("srcFolder"));
		dataMess.put("dF", properties.getProperty("destFolder"));
		dataMess.put("uF", properties.getProperty("updateFolder"));
		dataMess.put("sP", properties.getProperty("startPort"));
		dataMess.put("eP", properties.getProperty("endPort"));
		dataMess.put("cS", properties.getProperty("configSet"));
		dataMess.put("wF", properties.getProperty("warFolder"));
		return dataMess;

	}
	/**
	 * 查找文件路径
	 * @param searchName
	 * @param filePath
	 * @return
	 */
	public static String getRootWarFolder(String searchName,String filePath) {
		String result = "";
		File fileParent = new File(filePath);
		File[] files = fileParent.listFiles();
		for (File fileChild : files) {
				if (fileChild.getName().equals(searchName)) {
					result = fileChild.getAbsolutePath();
					break;
			}
		}
		return result;
	}
	
	/***
	 * 修复时间毫秒问题
	 * @param date
	 * @return
	 */
	@SuppressWarnings("deprecation")
	public static Date getAppointDayOfEndTime(Date date) {
	    Calendar c = Calendar.getInstance();
	    c.setTime(date);
	    c.set(Calendar.SECOND, date.getSeconds());
	    c.set(Calendar.MILLISECOND, 0);
	    return c.getTime();
	}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值