java常用的工具類之String與MD5加密解密類
我們java程式設計師在開發專案的是常常會用到一些工具類別。今天我分享我的兩個工具類,大家可以在專案中使用。
一、String工具類
package com.itjh.javaUtil;import java.io.ByteArrayInputStream;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStreamimportStream;import java.io.IOException;import java.io.InputStreamimportio.InputStreamimport; java.io.OutputStream;/** * 檔案相關操作輔助類別。 * * @author 宋立君* @date 2014年06月24日*/public class FileUtil {private static final String FOLDER_SEPARATOR = "/";private static final char EXTENSION_SEPARATOR = '.';/** * * 功能:複製檔案或檔案夾。 * * @author 宋立君* @date 2014年06月24日* @param inputFile * 來源檔案* @param outputFile * 目的檔案* @param isOverWrite * 是否覆寫(只針對檔案) * @throws IOException */public static void copy (File inputFile, File outputFile, boolean isOverWrite)throws IOException {if (!inputFile.exists()) {throw new RuntimeException(inputFile.getPath() + "來源目錄不存在!");}copyPri(inputFile, outputFile, isOverWrite);}/** * 功能:為copy** *做遞歸使用。 * * @author 宋立君* @date 2014年06月24日* @param inputFile * @param outputFile * @param isOverWrite * @throws IOException */private static void copyPri(File inputFile, File IOoutputFile, lean IOoutExpoo / 是個檔案。 if (inputFile.isFile()) {copySimpleFile(inputFile, outputFile, isOverWrite);} else {// 資料夾if (!outputFile.exists()) {outputFile.mkdir();}// 迴圈子資料夾for ( File child : inputFile.listFiles()) {copy(child,new File(outputFile.getPath() + "/" + child.getName()),isOverWrite);}}}/** * 功能:copy單一檔案* * @author 宋立君* @date 2014年06月24日* @param inputFile * 原始檔* @param outputFile * 目標檔案* @param isOverWrite * 是否允許覆蓋* @throws IOException */private static void copySimpleFile(File inputFile, File outputFile,boolean isOverWrite) throws IOException {// 目標檔案已經存在if (outputFile.exists()) {if (isOverWrite) {if (!outputFile.delete()) {throw new RuntimeException(outputFile. getPath() + "無法覆蓋!");}} else {//不允許覆寫return;}}InputStream in = new FileInputStream(inputFile);OutputStream out = new FileOutputStream(outputFile);byte[] buffer = new byte[1024];int read = 0;while ((read = in.read( buffer)) != -1) {out.write(buffer, 0, read);}in.close();out.close();}/** * 功能:刪除檔案* * @author 宋立君* @date 2014年06月24日* @param file * 檔案*/public static void delete(File file) {deleteFile(file);}/** * 功能:刪除文件,內部遞歸使用* * @author 宋立君* @date 2014年06月24日* @param file * 文件* @return boolean true 刪除成功,false 刪除失敗。 */private static void deleteFile(File file) {if (file == null || !file.exists()) {return;}// 單一檔案if (!file.isDirectory()) {boolean delFlag = file.delete ();if (!delFlag) {throw new RuntimeException(file.getPath() + "刪除失敗!");} else {return;}}// 刪除子目錄for (File child : file.listFiles()) {deleteFile(child);}// 刪除自己file.delete();}/** * 從檔案路徑中抽取檔案的副檔名, 例如. "mypath/myfile.txt" -> "txt". * @author 宋立君* * @date 2014年06月24日* @param 檔案路徑* @return如果path為null,直接回傳null。 */public static String getFilenameExtension(String path) {if (path == null) {return null;}int extIndex = path.lastIndexOf(EXTENSION_SEPARATOR);if (extIndex == -1) {return null;}int folderIndex}int = path .lastIndexOf(FOLDER_SEPARATOR);if (folderIndex > extIndex) {return null;}return path.substring(extIndex + 1);}/** * 從檔案路徑中抽取檔案名稱, 例如: "mypath/myfile.txt" -> "myfile.txt"。 * @author 宋立君* * @date 2014年06月24日* @param path * 文件路徑。 * @return 抽取的檔名, 如果path為null,直接回傳null。 */public static String getFilename(String path) {if (path == null) {return null;}int separatorIndex = path.lastIndexOf(FOLDER_SEPARATOR);return (separatorIndex != -1 ? path.substring(separator. path);}/** * 功能:儲存檔案。 * * @author 宋立君* @date 2014年06月24日* @param content * 位元組* @param file * 儲存到的檔案* @throws IOException */public static void save(byte[] content, File file) throws IOException {if (file == null) {throw new RuntimeException("儲存檔案不能為空");}if (content == null) {throw new RuntimeException("檔案流不能為空");}InputStream is = new ByteArrayInputStream(content);save(is, 檔案); }/** * 功能:儲存檔案* * @author 宋立君* @date 2014年06月24日* @param streamIn * 檔案流* @param file * 已儲存的檔案* @throws IOException */public static void save(InputStream streamIn, File file) throws IOException {if (file == null) {throw new RuntimeException("儲存檔案不能為空");} if (streamIn == null) {throw new RuntimeException("檔案流不能為空");}//輸出流OutputStream streamOut = null;// 資料夾不存在就建立。 if (!file.getParentFile().exists()) {file.getParentFile().mkdirs();}streamOut = new FileOutputStream(file);int bytesRead = 0;byte[] buffer = new byte[8192];while ((bytesRead = streamIn.read(buffer, 0, 8192)) != -1) {streamOut.write(buffer, 0, bytesRead);}streamOut.close();streamIn.close();}}
二、MD5工具類
package com.itjh.javaUtil;import java.io.ByteArrayInputStream;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStreamimportStream;import java.io.IOException;import java.io.InputStreamimportio.InputStreamimport; java.io.OutputStream;/** * 檔案相關操作輔助類別。 * * @author 宋立君* @date 2014年06月24日*/public class FileUtil {private static final String FOLDER_SEPARATOR = "/";private static final char EXTENSION_SEPARATOR = '.';/** * * 功能:複製檔案或檔案夾。 * * @author 宋立君* @date 2014年06月24日* @param inputFile * 來源檔案* @param outputFile * 目的檔案* @param isOverWrite * 是否覆寫(只針對檔案) * @throws IOException */public static void copy (File inputFile, File outputFile, boolean isOverWrite)throws IOException {if (!inputFile.exists()) {throw new RuntimeException(inputFile.getPath() + "來源目錄不存在!");}copyPri(inputFile, outputFile, isOverWrite);}/** * 功能:為copy** *做遞歸使用。 * * @author 宋立君* @date 2014年06月24日* @param inputFile * @param outputFile * @param isOverWrite * @throws IOException */private static void copyPri(File inputFile, File IOoutputFile, lean IOoutExpoo / 是個檔案。 if (inputFile.isFile()) {copySimpleFile(inputFile, outputFile, isOverWrite);} else {// 資料夾if (!outputFile.exists()) {outputFile.mkdir();}// 迴圈子資料夾for ( File child : inputFile.listFiles()) {copy(child,new File(outputFile.getPath() + "/" + child.getName()),isOverWrite);}}}/** * 功能:copy單一檔案* * @author 宋立君* @date 2014年06月24日* @param inputFile * 原始檔* @param outputFile * 目標檔案* @param isOverWrite * 是否允許覆蓋* @throws IOException */private static void copySimpleFile(File inputFile, File outputFile,boolean isOverWrite) throws IOException {// 目標檔案已經存在if (outputFile.exists()) {if (isOverWrite) {if (!outputFile.delete()) {throw new RuntimeException(outputFile. getPath() + "無法覆蓋!");}} else {//不允許覆寫return;}}InputStream in = new FileInputStream(inputFile);OutputStream out = new FileOutputStream(outputFile);byte[] buffer = new byte[1024];int read = 0;while ((read = in.read( buffer)) != -1) {out.write(buffer, 0, read);}in.close();out.close();}/** * 功能:刪除檔案* * @author 宋立君* @date 2014年06月24日* @param file * 檔案*/public static void delete(File file) {deleteFile(file);}/** * 功能:刪除文件,內部遞歸使用* * @author 宋立君* @date 2014年06月24日* @param file * 文件* @return boolean true 刪除成功,false 刪除失敗。 */private static void deleteFile(File file) {if (file == null || !file.exists()) {return;}// 單一檔案if (!file.isDirectory()) {boolean delFlag = file.delete ();if (!delFlag) {throw new RuntimeException(file.getPath() + "刪除失敗!");} else {return;}}// 刪除子目錄for (File child : file.listFiles()) {deleteFile(child);}// 刪除自己file.delete();}/** * 從檔案路徑中抽取檔案的副檔名, 例如. "mypath/myfile.txt" -> "txt". * @author 宋立君* * @date 2014年06月24日* @param 檔案路徑* @return如果path為null,直接回傳null。 */public static String getFilenameExtension(String path) {if (path == null) {return null;}int extIndex = path.lastIndexOf(EXTENSION_SEPARATOR);if (extIndex == -1) {return null;}int folderIndex}int = path .lastIndexOf(FOLDER_SEPARATOR);if (folderIndex > extIndex) {return null;}return path.substring(extIndex + 1);}/** * 從檔案路徑中抽取檔案名稱, 例如: "mypath/myfile.txt" -> "myfile.txt"。 * @author 宋立君* * @date 2014年06月24日* @param path * 文件路徑。 * @return 抽取的檔名, 如果path為null,直接回傳null。 */public static String getFilename(String path) {if (path == null) {return null;}int separatorIndex = path.lastIndexOf(FOLDER_SEPARATOR);return (separatorIndex != -1 ? path.substring(separator. path);}/** * 功能:儲存檔案。 * * @author 宋立君* @date 2014年06月24日* @param content * 位元組* @param file * 儲存到的檔案* @throws IOException */public static void save(byte[] content, File file) throws IOException {if (file == null) {throw new RuntimeException("儲存檔案不能為空");}if (content == null) {throw new RuntimeException("檔案流不能為空");}InputStream is = new ByteArrayInputStream(content);save(is, 檔案); }/** * 功能:儲存檔案* * @author 宋立君* @date 2014年06月24日* @param streamIn * 檔案流* @param file * 已儲存的檔案* @throws IOException */public static void save(InputStream streamIn, File file) throws IOException {if (file == null) {throw new RuntimeException("儲存檔案不能為空");} if (streamIn == null) {throw new RuntimeException("檔案流不能為空");}//輸出流OutputStream streamOut = null;// 資料夾不存在就建立。 if (!file.getParentFile().exists()) {file.getParentFile().mkdirs();}streamOut = new FileOutputStream(file);int bytesRead = 0;byte[] buffer = new byte[8192];while ((bytesRead = streamIn.read(buffer, 0, 8192)) != -1) {streamOut.write(buffer, 0, bytesRead);}streamOut.close();streamIn.close();}}