0.jsp表示
1.文件后缀名取得
/**
* 拡張子を取得する
*
* @param fileName
* @return ".xxx"文字列
*/
public static String getExt(String fileName) {
int dotLastIndex = fileName.lastIndexOf(".");
if (fileName == null || dotLastIndex < 0
|| dotLastIndex == fileName.length() - 1) {
// ファイル名がない場合、もしくは拡張子がない場合
return null;
}
String ext = fileName.substring(dotLastIndex);
return ext;
}
2.在指定路径,找指定文件名,可以写后缀名,也可以不写。
/**
* ディレクトリ先からファイル名を取得する
*
* @param directoryPath ディレクトリ先
* @param fileNameNoSuffix ファイル名(".pdf"文字列)
* @param fileNameSuffix 拡張子
* @return "xxx.xxx"文字列
*/
public static String findFileName(String directoryPath, String fileNameNoSuffix, String fileNameSuffix) {
String fileName = "";
if (StringUtils.isEmpty(directoryPath)) {
return fileName;
}
File directory = new File(directoryPath);
File[] files = directory.listFiles();
if (files != null) {
for (int i = 0; i < files.length; i++) {
File file = files[i];
if (file.isFile()) {
String fileNm = file.getName();
if(StringUtil.required(fileNameSuffix)) {
// 拡張が有り
if (fileNm.equals(fileNameNoSuffix + fileNameSuffix)) {
fileName = fileNm;
break;
}
}else {
// 拡張が無
int indexDot = fileNm.lastIndexOf(GPMConstant.FILE_EXT_DOT);
if (indexDot != -1) {
if (fileNm.substring(0, indexDot).equals(fileNameNoSuffix)) {
fileName = fileNm;
break;
}
}
}
}
}
}
return fileName;
}
3.上传文件,指定目标地址和目标文件名。
/**
* アップロードファイル
*
* @param srcFile アップロードファイル
* @param destDirectory ファイル格納先
* @return ファイル名
* @throws SystemException
*/
public static File copyFile(FormFile srcFile, String newFileNameNoExt, String destDirectory) throws SystemException {
if (srcFile == null) {
LogInfo logInfo = new LogInfo("MECO00011", "ファイルが存在しません。");
throw new SystemException(logInfo, "E9009");
}
// 画像ファイルをディレクトリパス先に格納する
if (StringUtils.isNotEmpty(destDirectory)) {
File dest = new File(destDirectory);
if (!dest.exists()) {
LogInfo logInfo = new LogInfo("MECO00011", "ファイル格納先:" + destDirectory + "が存在しません。");
throw new SystemException(logInfo, "E9009");
}
if (!dest.isDirectory()) {
LogInfo logInfo = new LogInfo("MECO00011", "ファイル格納先:" + destDirectory + "がディレクトリではありません。");
throw new SystemException(logInfo, "E9009");
}
try {
String fullFileName = newFileNameNoExt;
String ext = getExt(srcFile.getFileName());
if (ext != null) {
fullFileName += ext;
}
Path destFilePath = Paths.get(destDirectory, fullFileName);
Files.copy(srcFile.getInputStream(), destFilePath, StandardCopyOption.REPLACE_EXISTING);
return destFilePath.toFile();
} catch (IOException e) {
LogInfo logInfo = new LogInfo("MECO00011", e.getMessage());
throw new SystemException(logInfo, "E9009");
}
} else {
LogInfo logInfo = new LogInfo("MECO00011", "ファイル格納先:" + destDirectory + "が存在しません。");
throw new SystemException(logInfo, "E9009");
}
}
4.备份文件,从哪到哪,备份文件名
UUID.randomUUID().toString()
/**
* バックアップファイル
*
* @param srcFileNameNoExt ファイル名
* @param srcFileExt 拡張子
* @param srcDirectory ファイル格納先
* @param destDirectory バックアップフ格納先
* @return ファイル名
* @throws SystemException
*/
public static File backupFile(String srcFileNameNoExt, String srcFileExt, String srcDirectory, String destDirectory) throws SystemException {
File backup = null;
if (StringUtils.isEmpty(srcDirectory) || StringUtils.isEmpty(destDirectory)) {
return null;
}
try {
File src = new File(srcDirectory);
File dest = new File(destDirectory);
if (src.exists() && dest.exists()) {
String fullFileName = findFileName(srcDirectory, srcFileNameNoExt, srcFileExt);
// 指定したファイルが存在の場合
if (StringUtils.isNotEmpty(fullFileName)) {
Path srcFilePath = Paths.get(srcDirectory, fullFileName);
String ext = getExt(fullFileName);
String newFileName = UUID.randomUUID().toString();
if (ext != null) {
newFileName += ext;
}
Path destFilePath = Paths.get(destDirectory, newFileName);
Files.copy(srcFilePath, destFilePath, StandardCopyOption.REPLACE_EXISTING);
backup = destFilePath.toFile();
}
}
return backup;
} catch (IOException e) {
LogInfo logInfo = new LogInfo("MECO00011", e.getMessage());
throw new SystemException(logInfo, "E9009");
}
}
5.移动文件
/**
* ファイル移動
*
* @param srcFile ファイル
* @param destFileNameNoExt ファイル名
* @param destDirectory ファイル格納先
* @throws SystemException
*/
public static void moveFile(File srcFile, String destFileNameNoExt, String destDirectory) throws SystemException {
if (srcFile == null) {
LogInfo logInfo = new LogInfo("MECO00011", "ファイルが存在しません。");
throw new SystemException(logInfo, "E9009");
}
// 画像ファイルをディレクトリパス先に格納する
if (StringUtils.isNotEmpty(destDirectory)) {
File dest = new File(destDirectory);
if (!dest.exists()) {
LogInfo logInfo = new LogInfo("MECO00011", "ファイル格納先:" + destDirectory + "が存在しません。");
throw new SystemException(logInfo, "E9009");
}
if (!dest.isDirectory()) {
LogInfo logInfo = new LogInfo("MECO00011", "ファイル格納先がディレクトリではありません。");
throw new SystemException(logInfo, "E9009");
}
try {
String ext = getExt(srcFile.getName());
String destFileName = destFileNameNoExt;
if (ext != null) {
destFileName += ext;
}
Path destFilePath = Paths.get(destDirectory, destFileName);
Files.move(srcFile.toPath(), destFilePath, StandardCopyOption.REPLACE_EXISTING);
} catch (IOException e) {
LogInfo logInfo = new LogInfo("MECO00011", e.getMessage());
throw new SystemException(logInfo, "E9009");
}
} else {
LogInfo logInfo = new LogInfo("MECO00011", "ファイル格納先:" + destDirectory + "が存在しません。");
throw new SystemException(logInfo, "E9009");
}
}
6.删除指定文件
/**
* ディレクトリの中で、指定したファイルを削除
* @param destDirectory ファイル格納先
* @param fileNameNoExt ファイル名
* @param fileNameSuffix 拡張子
* @throws SystemException
*/
public static void deleteFileByName(String destDirectory, String fileNameNoExt, String fileNameSuffix) throws SystemException {
if (StringUtils.isEmpty(destDirectory)) {
return;
}
try {
File dest = new File(destDirectory);
if (dest.exists()) {
String fullFileName = findFileName(destDirectory, fileNameNoExt, fileNameSuffix);
// 指定したファイルが存在
if (StringUtils.isNotEmpty(fullFileName)) {
Path destFile = Paths.get(destDirectory, fullFileName);
Files.delete(destFile);
}
}
} catch (IOException e) {
LogInfo logInfo = new LogInfo("MECO00011", e.getMessage());
throw new SystemException(logInfo, "E9009");
}
}
7.删除指定目录(备份用),超过24小时的文件
/**
* ディレクトリの中で、作成後24時間以上経過したファイルを削除
* @param destDirectory ファイル格納先
* @param fileNameNoExt ファイル名
* @throws SystemException
*/
public static void deleteFileAfter24Hour(String destDirectory) {
if (StringUtils.isEmpty(destDirectory)) {
return;
}
long dayCurrentTimeMillis = 24 * 60 * 60 * 1000;
long currentTimeMillis = System.currentTimeMillis();
File dest = new File(destDirectory);
File[] files = dest.listFiles();
if (files != null) {
long lastModified = 0L;
for (int i = 0; i < files.length; i++) {
File file = files[i];
lastModified = file.lastModified();
if (file.isFile() && (currentTimeMillis - lastModified > dayCurrentTimeMillis)) {
file.delete();
}
}
}
}
8.改变图像大小
/**
* 指定したサイズを基に、イメージのサイズを変更する
* @param is
* @param baseWidth
* @param baseHeight
* @param outputFile
* @throws SystemException
*/
public static void resizeImage(InputStream is, double baseWidth, double baseHeight, File outputFile) throws SystemException {
ImageInputStream iis = null;
String format = null;
try {
iis = ImageIO.createImageInputStream(is);
Iterator it = ImageIO.getImageReaders(iis);
while(it.hasNext()) {
ImageReader reader = it.next();
format = reader.getFormatName();
}
BufferedImage srcImage = ImageIO.read(iis);
if (format == null || srcImage == null || srcImage.getWidth() <= 0 || srcImage.getHeight() <= 0) {
LogInfo logInfo = new LogInfo("MECO00011", "ファイルが画像ファイルではありません。");
throw new SystemException(logInfo, "E9009");
}
double srcWidth = srcImage.getWidth();
double srcheight = srcImage.getHeight();
double percent = 0.0;
if (srcWidth > baseWidth && srcheight > baseHeight) {
double percentW = baseWidth / srcWidth;
double percentH = baseHeight / srcheight;
if (percentW <= percentH) {
percent = percentW;
} else {
percent = percentH;
}
} else if (srcWidth > baseWidth) {
percent = baseWidth / srcWidth;
} else if (srcheight > baseHeight) {
percent = baseHeight / srcheight;
} else {
// 画像ファイル の幅 ≦画像ファイルの 基準の幅 かつ 画像ファイルの 高さ ≦画像ファイルの 基準の高さの場合
// イメージのサイズを変更しない
return;
}
int resizedWidth = (int)(srcWidth * percent);
int resizedHeight = (int)(srcheight * percent);
BufferedImage resizedImage = new BufferedImage(resizedWidth, resizedHeight, srcImage.getType());
Graphics graphics = resizedImage.createGraphics();
graphics.drawImage(srcImage.getScaledInstance(resizedWidth, resizedHeight, Image.SCALE_DEFAULT), 0, 0, null);
ImageIO.write(resizedImage, format, outputFile);
} catch (IOException e) {
String subinfo = "MethodName:" + e.getStackTrace()[0].getMethodName() + " FileName:"
+ e.getStackTrace()[0].getFileName() + " Line:"
+ Format.longToString(e.getStackTrace()[0].getLineNumber());
LogInfo logInfo = new LogInfo("MECO00011", subinfo);
throw new SystemException(logInfo, "E9009");
} finally {
try {
if (is != null) {
is.close();
}
} catch (IOException e) {
String subinfo = "MethodName:" + e.getStackTrace()[0].getMethodName() + " FileName:"
+ e.getStackTrace()[0].getFileName() + " Line:"
+ Format.longToString(e.getStackTrace()[0].getLineNumber());
LogInfo logInfo = new LogInfo("MECO00011", subinfo);
throw new SystemException(logInfo, "E9009");
}
}
}
/**
* 指定したサイズを基に、イメージのサイズを変更する
* @param srcImg
* @param baseWidth
* @param baseHeight
* @param outputFile
* @throws SystemException
*/
public static void resizeImage(File srcImg, double baseWidth, double baseHeight, File outputFile) throws SystemException {
if (srcImg == null) {
LogInfo logInfo = new LogInfo("MECO00011", "ファイルが存在しません。");
throw new SystemException(logInfo, "E9009");
}
try {
InputStream is = new FileInputStream(srcImg);
resizeImage(is, baseWidth, baseHeight, outputFile);
} catch (IOException e) {
String subinfo = "MethodName:" + e.getStackTrace()[0].getMethodName() + " FileName:"
+ e.getStackTrace()[0].getFileName() + " Line:"
+ Format.longToString(e.getStackTrace()[0].getLineNumber());
LogInfo logInfo = new LogInfo("MECO00011", subinfo);
throw new SystemException(logInfo, "E9009");
}
}
/**
* 指定したサイズを基に、イメージのサイズを変更する
* @param srcImg
* @param baseWidth
* @param baseHeight
* @param outputFile
* @throws SystemException
*/
public static void resizeImage(FormFile srcImg, double baseWidth, double baseHeight, File outputFile) throws SystemException {
if (srcImg == null) {
LogInfo logInfo = new LogInfo("MECO00011", "ファイルが存在しません。");
throw new SystemException(logInfo, "E9009");
}
try {
InputStream is = srcImg.getInputStream();
resizeImage(is, baseWidth, baseHeight, outputFile);
} catch (IOException e) {
String subinfo = "MethodName:" + e.getStackTrace()[0].getMethodName() + " FileName:"
+ e.getStackTrace()[0].getFileName() + " Line:"
+ Format.longToString(e.getStackTrace()[0].getLineNumber());
LogInfo logInfo = new LogInfo("MECO00011", subinfo);
throw new SystemException(logInfo, "E9009");
}
}