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.InputStream;
- import 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 outputFile,
- boolean isOverWrite) throws IOException {
- // 是個文件。
- 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 = 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(separatorIndex + 1)
- : 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, file);
- }
- /**
- * 功能:保存文件
- *
- * @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.InputStream;
- import 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 outputFile,
- boolean isOverWrite) throws IOException {
- // 是個文件。
- 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 = 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(separatorIndex + 1)
- : 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, file);
- }
- /**
- * 功能:保存文件
- *
- * @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();
- }
- }