自己写的文件操作工具类,供以后翻阅查看:
public class FileUtil {
private static Logger logger = LogFactory.getLog(FileUtil.class);
/**
* 当前的classpath的绝对路径
*
* @return
*/
public static String getClassPath() {
URL url = Thread.currentThread().getContextClassLoader()
.getResource("");
String path = url.toString();
if (path.startsWith("file:")) {
path = path.substring(6);
}
return path;
}
/**
* 获得项目根目录的绝对路径
* @return default value is null
*/
public static String getProjectPath() {
//默认NULL
return System.getProperty(SystemConstants.PROJECT_PATH, null);
}
/**
* 创建文件夹
* @param strFilePath
* 文件夹路径
*/
public static boolean mkdirFolder(String strFilePath) {
boolean bFlag = false;
try {
File file = new File(strFilePath.toString());
if (!file.exists()) {
bFlag = file.mkdir();
}
} catch (Exception e) {
logger.error("新建目录操作出错" + e.getLocalizedMessage());
e.printStackTrace();
}
return bFlag;
}
/**
* 创建文件
* @param strFilePath
* @return
*/
public static boolean createFile(String strFilePath) {
boolean bFlag = false;
try {
File file = new File(strFilePath.toString());
if (!file.exists()) {
bFlag = file.createNewFile();
}
} catch (Exception e) {
logger.error("新建文件操作出错" + e.getLocalizedMessage());
e.printStackTrace();
}
return bFlag;
}
/**
* 删除文件
* @param strFilePath
* @return
*/
public static boolean removeFile(String strFilePath) {
boolean result = false;
if (strFilePath == null || "".equals(strFilePath)) {
return result;
}
File file = new File(strFilePath);
if (file.isFile() && file.exists()) {
result = file.delete();
if (result == Boolean.TRUE) {
logger.debug("[REMOE_FILE:" + strFilePath + "删除成功!]");
} else {
logger.debug("[REMOE_FILE:" + strFilePath + "删除失败]");
}
}
return result;
}
/**
* 删除文件夹(包括文件夹中的文件内容,文件夹)
* @param strFolderPath
* @return
*/
public static boolean removeFolder(String strFolderPath) {
boolean bFlag = false;
try {
if (strFolderPath == null || "".equals(strFolderPath)) {
return bFlag;
}
File file = new File(strFolderPath.toString());
bFlag = file.delete();
if (bFlag == Boolean.TRUE) {
logger.debug("[REMOE_FOLDER:" + file.getPath() + "删除成功!]");
} else {
logger.debug("[REMOE_FOLDER:" + file.getPath() + "删除失败]");
}
} catch (Exception e) {
logger.error("FLOADER_PATH:" + strFolderPath + "删除文件夹失败!");
e.printStackTrace();
}
return bFlag;
}
/**
* 移除所有文件
* @param strPath
*/
public static void removeAllFile(String strPath) {
File file = new File(strPath);
if (!file.exists()) {
return;
}
if (!file.isDirectory()) {
return;
}
String[] fileList = file.list();
File tempFile = null;
for (int i = 0; i < fileList.length; i++) {
if (strPath.endsWith(File.separator)) {
tempFile = new File(strPath + fileList[i]);
} else {
tempFile = new File(strPath + File.separator + fileList[i]);
}
if (tempFile.isFile()) {
tempFile.delete();
}
if (tempFile.isDirectory()) {
removeAllFile(strPath + "/" + fileList[i]);// 下删除文件夹里面的文件
removeFolder(strPath + "/" + fileList[i]);// 删除文件夹
}
}
}
/**
* 复制文件
* @param oldPath 源路径
* @param newPath 目标路径
*/
public static void copyFile(String oldPath, String newPath) {
try {
int bytesum = 0;
int byteread = 0;
File oldfile = new File(oldPath);
if (oldfile.exists()) { // 文件存在时
InputStream inStream = new FileInputStream(oldPath); // 读入原文件
FileOutputStream fs = new FileOutputStream(newPath);
byte[] buffer = new byte[1444];
while ((byteread = inStream.read(buffer)) != -1) {
bytesum += byteread; // 字节数 文件大小
System.out.println(bytesum);
fs.write(buffer, 0, byteread);
}
fs.close();
inStream.close();
logger.debug("[COPY_FILE:" + oldfile.getPath() + "复制文件成功!]");
}
} catch (Exception e) {
System.err.println("复制单个文件操作出错 ");
e.printStackTrace();
}
}
/**
* 复制文件夹
* @param oldPath 源路径
* @param newPath 目标路径
*/
public static void copyFolder(String oldPath, String newPath) {
try {
(new File(newPath)).mkdirs(); // 如果文件夹不存在 则建立新文件夹
File a = new File(oldPath);
String[] file = a.list();
File temp = null;
for (int i = 0; i < file.length; i++) {
if (oldPath.endsWith(File.separator)) {
temp = new File(oldPath + file[i]);
} else {
temp = new File(oldPath + File.separator + file[i]);
}
if (temp.isFile()) {
FileInputStream input = new FileInputStream(temp);
FileOutputStream output = new FileOutputStream(newPath
+ "/" + (temp.getName()).toString());
byte[] b = new byte[1024 * 5];
int len;
while ((len = input.read(b)) != -1) {
output.write(b, 0, len);
}
output.flush();
output.close();
input.close();
logger.debug("[COPY_FILE:" + temp.getPath() + "复制文件成功!]");
}
if (temp.isDirectory()) {// 如果是子文件夹
copyFolder(oldPath + "/" + file[i], newPath + "/"
+ file[i]);
}
}
} catch (Exception e) {
System.err.println("复制整个文件夹内容操作出错 ");
e.printStackTrace();
}
}
/**
* 写入文件
* @param filePath 文件路径
* @param content 文件内容
* @return
*/
public static boolean writeFile(String filePath, String content) {
try {
File f = new File(filePath);
if(f.isDirectory())
{
logger.error("路径"+filePath+"错误,目标文件不能为目录");
return false;
}
File parentF = f.getParentFile();
if(!parentF.exists()){
parentF.mkdirs();
logger.info("创建目录");
}
FileWriter fw = new FileWriter(filePath);
long begin3 = System.currentTimeMillis();
fw.write(content);
fw.close();
long end3 = System.currentTimeMillis();
logger.info("执行文件写入耗时" + (end3 - begin3) + " 毫秒");
return true;
} catch (IOException e) {
e.printStackTrace();
logger.error(filePath+"文件写入失败");
return false;
}
}
/**
* 列出目录下的对应的文件名
* @param lstFileNames
* @param f
* @param suffix
* @param isdepth
* @return
*/
public static List<String> listFile(List<String> lstFileNames, File f, String suffix, boolean isdepth) {
// 若是目录, 采用递归的方法遍历子目录
if (f.isDirectory()) {
File[] t = f.listFiles();
for (int i = 0; i < t.length; i++) {
if (isdepth || t[i].isFile()) {
listFile(lstFileNames, t[i], suffix, isdepth);
}
}
} else {
String filePath = f.getAbsolutePath();
if (!suffix.equals("")) {
int begIndex = filePath.lastIndexOf("."); // 最后一个.(即后缀名前面的.)的索引
String tempsuffix = "";
if (begIndex != -1) {
tempsuffix = filePath.substring(begIndex, filePath.length());
if (tempsuffix.equals(suffix)) {
lstFileNames.add(f.getName());
}
}
} else {
lstFileNames.add(f.getName());
}
}
return lstFileNames;
}
/**
* 列出目录下的对应的文件名
* @param lstFilePaths
* @param f
* @param suffix
* @param isdepth
* @return
*/
public static List<String> listFilePath(List<String> lstFilePaths, File f, String suffix, boolean isdepth) {
// 若是目录, 采用递归的方法遍历子目录
if (f.isDirectory()) {
File[] t = f.listFiles();
for (int i = 0; i < t.length; i++) {
if (isdepth || t[i].isFile()) {
listFilePath(lstFilePaths, t[i], suffix, isdepth);
}
}
} else {
String filePath = f.getAbsolutePath();
if (!suffix.equals("")) {
int begIndex = filePath.lastIndexOf("."); // 最后一个.(即后缀名前面的.)的索引
String tempsuffix = "";
if (begIndex != -1) {
tempsuffix = filePath.substring(begIndex, filePath.length());
if (tempsuffix.equals(suffix)) {
lstFilePaths.add(filePath);
}
}
}
}
return lstFilePaths;
}
/**
* 上传文件到ftp上(将项目运行的电脑即服务器上将文件传入ftp,而非客户端)
* @param ftpClient ftp连接
* @param remoteFilePath ftp文件保存路径
* @param localFilePath 服务器文件路径
* @return boolean 上传是否成功
*/
public static boolean ftpUpload(FtpClient ftpClient,String remoteFilePath,String localFilePath) {
try {
TelnetOutputStream os = ftpClient.put(remoteFilePath);
java.io.File file_in = new java.io.File(localFilePath);
FileInputStream is = new FileInputStream(file_in);
byte[] bytes = new byte[1024];
int c;
while ((c = is.read(bytes)) != -1) {
os.write(bytes, 0, c);
}
is.close();
os.close();
return true;
} catch (IOException e) {
System.out.println("ftp文件上传失败!");
e.printStackTrace();
return false;
}
}
/**
* 下载ftp上的文件(下载到项目运行的电脑上,即服务器,而非客户端)
* @param ftpClient ftp连接
* @param remoteFilePath ftp文件路径
* @param localFilePath 服务器保存路径
* @return boolean 下载是否成功
*/
public static boolean ftpDownload(FtpClient ftpClient,String remoteFilePath,String localFilePath) {
try {
TelnetInputStream is = ftpClient.get(remoteFilePath);
java.io.File file_in = new java.io.File(localFilePath);
FileOutputStream os = new FileOutputStream(file_in);
byte[] bytes = new byte[1024];
int c;
while ((c = is.read(bytes)) != -1) {
os.write(bytes, 0, c);
}
os.close();
is.close();
return true;
}catch(IOException e) {
System.out.println("ftp文件下载失败!");
e.printStackTrace();
return false;
}
}
}