File的创建删除复制等功能实现
生活随笔
收集整理的這篇文章主要介紹了
File的创建删除复制等功能实现
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
最近在做一個統(tǒng)計學(xué)的東西,里面用到了相關(guān)File的相關(guān)類的方法等。下面做一下總結(jié):
/*** 文件操作工具類* 實現(xiàn)文件的創(chuàng)建、刪除、復(fù)制、壓縮、解壓以及目錄的創(chuàng)建、刪除、復(fù)制、壓縮解壓等功能*/ public class FileUtils extends org.apache.commons.io.FileUtils {/*** 復(fù)制單個文件,如果目標(biāo)文件存在,則不覆蓋* @param srcFileName 待復(fù)制的文件名* @param descFileName 目標(biāo)文件名* @return 如果復(fù)制成功,則返回true,否則返回false*/public static boolean copyFile(String srcFileName, String descFileName) {return FileUtils.copyFileCover(srcFileName, descFileName, false);}/*** 復(fù)制單個文件* @param srcFileName 待復(fù)制的文件名* @param descFileName 目標(biāo)文件名* @param coverlay 如果目標(biāo)文件已存在,是否覆蓋* @return 如果復(fù)制成功,則返回true,否則返回false*/public static boolean copyFileCover(String srcFileName,String descFileName, boolean coverlay) {File srcFile = new File(srcFileName);// 判斷源文件是否存在if (!srcFile.exists()) {log.debug("復(fù)制文件失敗,源文件 " + srcFileName + " 不存在!");return false;}// 判斷源文件是否是合法的文件else if (!srcFile.isFile()) {log.debug("復(fù)制文件失敗," + srcFileName + " 不是一個文件!");return false;}File descFile = new File(descFileName);// 判斷目標(biāo)文件是否存在if (descFile.exists()) {// 如果目標(biāo)文件存在,并且允許覆蓋if (coverlay) {log.debug("目標(biāo)文件已存在,準(zhǔn)備刪除!");if (!FileUtils.delFile(descFileName)) {log.debug("刪除目標(biāo)文件 " + descFileName + " 失敗!");return false;}} else {log.debug("復(fù)制文件失敗,目標(biāo)文件 " + descFileName + " 已存在!");return false;}} else {if (!descFile.getParentFile().exists()) {// 如果目標(biāo)文件所在的目錄不存在,則創(chuàng)建目錄log.debug("目標(biāo)文件所在的目錄不存在,創(chuàng)建目錄!");// 創(chuàng)建目標(biāo)文件所在的目錄if (!descFile.getParentFile().mkdirs()) {log.debug("創(chuàng)建目標(biāo)文件所在的目錄失敗!");return false;}}}// 準(zhǔn)備復(fù)制文件// 讀取的位數(shù)int readByte = 0;InputStream ins = null;OutputStream outs = null;try {// 打開源文件ins = new FileInputStream(srcFile);// 打開目標(biāo)文件的輸出流outs = new FileOutputStream(descFile);byte[] buf = new byte[1024];// 一次讀取1024個字節(jié),當(dāng)readByte為-1時表示文件已經(jīng)讀取完畢while ((readByte = ins.read(buf)) != -1) {// 將讀取的字節(jié)流寫入到輸出流outs.write(buf, 0, readByte);}log.debug("復(fù)制單個文件 " + srcFileName + " 到" + descFileName+ "成功!");return true;} catch (Exception e) {log.debug("復(fù)制文件失敗:" + e.getMessage());return false;} finally {// 關(guān)閉輸入輸出流,首先關(guān)閉輸出流,然后再關(guān)閉輸入流if (outs != null) {try {outs.close();} catch (IOException oute) {oute.printStackTrace();}}if (ins != null) {try {ins.close();} catch (IOException ine) {ine.printStackTrace();}}}}/*** 復(fù)制整個目錄的內(nèi)容,如果目標(biāo)目錄存在,則不覆蓋* @param srcDirName 源目錄名* @param descDirName 目標(biāo)目錄名* @return 如果復(fù)制成功返回true,否則返回false*/public static boolean copyDirectory(String srcDirName, String descDirName) {return FileUtils.copyDirectoryCover(srcDirName, descDirName,false);}/*** 復(fù)制整個目錄的內(nèi)容 * @param srcDirName 源目錄名* @param descDirName 目標(biāo)目錄名* @param coverlay 如果目標(biāo)目錄存在,是否覆蓋* @return 如果復(fù)制成功返回true,否則返回false*/public static boolean copyDirectoryCover(String srcDirName,String descDirName, boolean coverlay) {File srcDir = new File(srcDirName);// 判斷源目錄是否存在if (!srcDir.exists()) {log.debug("復(fù)制目錄失敗,源目錄 " + srcDirName + " 不存在!");return false;}// 判斷源目錄是否是目錄else if (!srcDir.isDirectory()) {log.debug("復(fù)制目錄失敗," + srcDirName + " 不是一個目錄!");return false;}// 如果目標(biāo)文件夾名不以文件分隔符結(jié)尾,自動添加文件分隔符String descDirNames = descDirName;if (!descDirNames.endsWith(File.separator)) {descDirNames = descDirNames + File.separator;}File descDir = new File(descDirNames);// 如果目標(biāo)文件夾存在if (descDir.exists()) {if (coverlay) {// 允許覆蓋目標(biāo)目錄log.debug("目標(biāo)目錄已存在,準(zhǔn)備刪除!");if (!FileUtils.delFile(descDirNames)) {log.debug("刪除目錄 " + descDirNames + " 失敗!");return false;}} else {log.debug("目標(biāo)目錄復(fù)制失敗,目標(biāo)目錄 " + descDirNames + " 已存在!");return false;}} else {// 創(chuàng)建目標(biāo)目錄log.debug("目標(biāo)目錄不存在,準(zhǔn)備創(chuàng)建!");if (!descDir.mkdirs()) {log.debug("創(chuàng)建目標(biāo)目錄失敗!");return false;}}boolean flag = true;// 列出源目錄下的所有文件名和子目錄名File[] files = srcDir.listFiles();for (int i = 0; i < files.length; i++) {// 如果是一個單個文件,則直接復(fù)制if (files[i].isFile()) {flag = FileUtils.copyFile(files[i].getAbsolutePath(),descDirName + files[i].getName());// 如果拷貝文件失敗,則退出循環(huán)if (!flag) {break;}}// 如果是子目錄,則繼續(xù)復(fù)制目錄if (files[i].isDirectory()) {flag = FileUtils.copyDirectory(files[i].getAbsolutePath(), descDirName + files[i].getName());// 如果拷貝目錄失敗,則退出循環(huán)if (!flag) {break;}}}if (!flag) {log.debug("復(fù)制目錄 " + srcDirName + " 到 " + descDirName + " 失敗!");return false;}log.debug("復(fù)制目錄 " + srcDirName + " 到 " + descDirName + " 成功!");return true;}/*** * 刪除文件,可以刪除單個文件或文件夾* * @param fileName 被刪除的文件名* @return 如果刪除成功,則返回true,否是返回false*/public static boolean delFile(String fileName) {File file = new File(fileName);if (!file.exists()) {log.debug(fileName + " 文件不存在!");return true;} else {if (file.isFile()) {return FileUtils.deleteFile(fileName);} else {return FileUtils.deleteDirectory(fileName);}}}/*** * 刪除單個文件* * @param fileName 被刪除的文件名* @return 如果刪除成功,則返回true,否則返回false*/public static boolean deleteFile(String fileName) {File file = new File(fileName);if (file.exists() && file.isFile()) {if (file.delete()) {log.debug("刪除文件 " + fileName + " 成功!");return true;} else {log.debug("刪除文件 " + fileName + " 失敗!");return false;}} else {log.debug(fileName + " 文件不存在!");return true;}}/*** * 刪除目錄及目錄下的文件* * @param dirName 被刪除的目錄所在的文件路徑* @return 如果目錄刪除成功,則返回true,否則返回false*/public static boolean deleteDirectory(String dirName) {String dirNames = dirName;if (!dirNames.endsWith(File.separator)) {dirNames = dirNames + File.separator;}File dirFile = new File(dirNames);if (!dirFile.exists() || !dirFile.isDirectory()) {log.debug(dirNames + " 目錄不存在!");return true;}boolean flag = true;// 列出全部文件及子目錄File[] files = dirFile.listFiles();for (int i = 0; i < files.length; i++) {// 刪除子文件if (files[i].isFile()) {flag = FileUtils.deleteFile(files[i].getAbsolutePath());// 如果刪除文件失敗,則退出循環(huán)if (!flag) {break;}}// 刪除子目錄else if (files[i].isDirectory()) {flag = FileUtils.deleteDirectory(files[i].getAbsolutePath());// 如果刪除子目錄失敗,則退出循環(huán)if (!flag) {break;}}}if (!flag) {log.debug("刪除目錄失敗!");return false;}// 刪除當(dāng)前目錄if (dirFile.delete()) {log.debug("刪除目錄 " + dirName + " 成功!");return true;} else {log.debug("刪除目錄 " + dirName + " 失敗!");return false;}}/*** 創(chuàng)建單個文件* @param descFileName 文件名,包含路徑* @return 如果創(chuàng)建成功,則返回true,否則返回false*/public static boolean createFile(String descFileName) {File file = new File(descFileName);if (file.exists()) {log.debug("文件 " + descFileName + " 已存在!");return false;}if (descFileName.endsWith(File.separator)) {log.debug(descFileName + " 為目錄,不能創(chuàng)建目錄!");return false;}if (!file.getParentFile().exists()) {// 如果文件所在的目錄不存在,則創(chuàng)建目錄if (!file.getParentFile().mkdirs()) {log.debug("創(chuàng)建文件所在的目錄失敗!");return false;}}// 創(chuàng)建文件try {if (file.createNewFile()) {log.debug(descFileName + " 文件創(chuàng)建成功!");return true;} else {log.debug(descFileName + " 文件創(chuàng)建失敗!");return false;}} catch (Exception e) {e.printStackTrace();log.debug(descFileName + " 文件創(chuàng)建失敗!");return false;}}/*** 創(chuàng)建目錄* @param descDirName 目錄名,包含路徑* @return 如果創(chuàng)建成功,則返回true,否則返回false*/public static boolean createDirectory(String descDirName) {String descDirNames = descDirName;if (!descDirNames.endsWith(File.separator)) {descDirNames = descDirNames + File.separator;}File descDir = new File(descDirNames);if (descDir.exists()) {log.debug("目錄 " + descDirNames + " 已存在!");return false;}// 創(chuàng)建目錄if (descDir.mkdirs()) {log.debug("目錄 " + descDirNames + " 創(chuàng)建成功!");return true;} else {log.debug("目錄 " + descDirNames + " 創(chuàng)建失敗!");return false;}}/*** 寫入文件* @param file 要寫入的文件*/public static void writeToFile(String fileName, String content, boolean append) {try {FileUtils.write(new File(fileName), content, "utf-8", append);log.debug("文件 " + fileName + " 寫入成功!");} catch (IOException e) {log.debug("文件 " + fileName + " 寫入失敗! " + e.getMessage());}}/*** 寫入文件*/public static void writeToFile(String fileName, String content, String encoding, boolean append) {try {FileUtils.write(new File(fileName), content, encoding, append);log.debug("文件 " + fileName + " 寫入成功!");} catch (IOException e) {log.debug("文件 " + fileName + " 寫入失敗! " + e.getMessage());}}/*** 修復(fù)路徑,將 \\ 或 / 等替換為 File.separator* @param path* @return*/public static String path(String path){String p = StringUtils.replace(path, "\\", "/");p = StringUtils.join(StringUtils.split(p, "/"), "/");if (!StringUtils.startsWithAny(p, "/") && StringUtils.startsWithAny(path, "\\", "/")){p += "/";}if (!StringUtils.endsWithAny(p, "/") && StringUtils.endsWithAny(path, "\\", "/")){p = p + "/";}return p;}}總結(jié)
以上是生活随笔為你收集整理的File的创建删除复制等功能实现的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: asp.net 动态创建TextBox控
- 下一篇: 领域驱动设计和开发实战总结