/*
* @(#)MyUtils.java 2008-12-14
*
* Copyright YOURGAME. All rights reserved.
*/
package com.lhq.prj.dd.core;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.Collection;
import java.util.Random;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.tools.zip.ZipEntry;
import org.apache.tools.zip.ZipFile;
import org.apache.tools.zip.ZipOutputStream;
import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGEncodeParam;
import com.sun.image.codec.jpeg.JPEGImageEncoder;
import de.innosystec.unrar.Archive;
import de.innosystec.unrar.exception.RarException;
import de.innosystec.unrar.rarfile.FileHeader;
public class MyUtils {
/**
* 删除文件
*
* @param filePathAndName
* String 文件路径及名称 如c:/fqf.txt
* @param fileContent
* String
* @return boolean
*/
public static boolean delFile(String filePathAndName) {
File myDelFile = new java.io.File(filePathAndName);
if (!myDelFile.exists()) {
return true;
}
return myDelFile.delete();
}
/**
* 删除指定文件路径下面的所有文件和文件夹
*
* @param file
*/
public static boolean delFiles(File file) {
boolean flag = false;
try {
if (file.exists()) {
if (file.isDirectory()) {
String[] contents = file.list();
for (int i = 0; i < contents.length; i++) {
File file2X = new File(file.getAbsolutePath() + "/" + contents[i]);
if (file2X.exists()) {
if (file2X.isFile()) {
flag = file2X.delete();
} else if (file2X.isDirectory()) {
delFiles(file2X);
}
} else {
throw new RuntimeException("File not exist!");
}
}
}
flag = file.delete();
} else {
throw new RuntimeException("File not exist!");
}
} catch (Exception e) {
flag = false;
e.printStackTrace();
}
return flag;
}
/**
* 判断文件名是否已经存在,如果存在则在后面家(n)的形式返回新的文件名,否则返回原始文件名 例如:已经存在文件名 log4j.htm
* 则返回log4j(1).htm
*
* @param fileName
* 文件名
* @param dir
* 判断的文件路径
* @return 判断后的文件名
*/
public static String checkFileName(String fileName, String dir) {
boolean isDirectory = new File(dir + fileName).isDirectory();
if (MyUtils.isFileExist(fileName, dir)) {
int index = fileName.lastIndexOf(".");
StringBuffer newFileName = new StringBuffer();
String name = isDirectory ? fileName : fileName.substring(0, index);
String extendName = isDirectory ? "" : fileName.substring(index);
int nameNum = 1;
while (true) {
newFileName.append(name).append("(").append(nameNum).append(")");
if (!isDirectory) {
newFileName.append(extendName);
}
if (MyUtils.isFileExist(newFileName.toString(), dir)) {
nameNum++;
newFileName = new StringBuffer();
continue;
}
return newFileName.toString();
}
}
return fileName;
}
/**
* 返回上传的结果,成功与否
*
* @param uploadFileName
* @param savePath
* @param uploadFile
* @return
*/
public static boolean upload(String uploadFileName, String savePath, File uploadFile) {
boolean flag = false;
try {
uploadForName(uploadFileName, savePath, uploadFile);
flag = true;
} catch (IOException e) {
flag = false;
e.printStackTrace();
}
return flag;
}
/**
* 上传文件并返回上传后的文件名
*
* @param uploadFileName
* 被上传的文件名称
* @param savePath
* 文件的保存路径
* @param uploadFile
* 被上传的文件
* @return 成功与否
* @throws IOException
*/
public static String uploadForName(String uploadFileName, String savePath, File uploadFile) throws IOException {
String newFileName = checkFileName(uploadFileName, savePath);
FileOutputStream fos = null;
FileInputStream fis = null;
try {
fos = new FileOutputStream(savePath + newFileName);
fis = new FileInputStream(uploadFile);
byte[] buffer = new byte[1024];
int len = 0;
while ((len = fis.read(buffer)) > 0) {
fos.write(buffer, 0, len);
}
} catch (FileNotFoundException e) {
throw e;
} catch (IOException e) {
throw e;
} finally {
try {
if (fos != null) {
fos.close();
}
if (fis != null) {
fis.close();
}
} catch (IOException e) {
throw e;
}
}
return newFileName;
}
/**
* 根据路径创建一系列的目录
*
* @param path
*/
public static boolean mkDirectory(String path) {
File file = null;
try {
file = new File(path);
if (!file.exists()) {
return file.mkdirs();
}
} catch (RuntimeException e) {
e.printStackTrace();
} finally {
file = null;
}
return false;
}
/**
* 将对象数组的每一个元素分别添加到指定集合中,调用Apache commons collections 中的方法
*
* @param collection
* 目标集合对象
* @param arr
* 对象数组
*/
public static void addToCollection(Collection collection, Object[] arr) {
if (null != collection && null != arr) {
CollectionUtils.addAll(collection, arr);
}
}
/**
* 将字符串已多个分隔符拆分为数组,调用Apache commons lang 中的方法
*
* <pre>
* Example:
* String[] arr = StringUtils.split("a b,c d,e-f", " ,");
* System.out.println(arr.length);//输出6
* </pre>
*
* @param str
* 目标字符串
* @param separatorChars
* 分隔符字符串
* @return 字符串数组
*/
public static String[] split(String str, String separatorChars) {
return StringUtils.split(str, separatorChars);
}
/**
* 调用指定字段的setter方法
*
* <pre>
* Example:
* User user = new User();
* MyUtils.invokeSetMethod("userName", user, new Object[] {"张三"});
* </pre>
*
* @param fieldName
* 字段(属性)名称
* @param invokeObj
* 被调用方法的对象
* @param args
* 被调用方法的参数数组
* @return 成功与否
*/
public static boolean invokeSetMethod(String fieldName, Object invokeObj, Object[] args) {
boolean flag = false;
Field[] fields = invokeObj.getClass().getDeclaredFields(); // 获得对象实体类中所有定义的字段
Method[] methods = invokeObj.getClass().getDeclaredMethods(); // 获得对象实体类中所有定义的方法
for (Field f : fields) {
String fname = f.getName();
if (fname.equals(fieldName)) {// 找到要更新的字段名
String mname = "set" + (fname.substring(0, 1).toUpperCase() + fname.substring(1));// 组建setter方法
for (Method m : methods) {
String name = m.getName();
if (mname.equals(name)) {
// 处理Integer参数
if (f.getType().getSimpleName().equalsIgnoreCase("integer") && args.length > 0) {
args[0] = Integer.valueOf(args[0].toString());
}
// 处理Boolean参数
if (f.getType().getSimpleName().equalsIgnoreCase("boolean") && args.length > 0) {
args[0] = Boolean.valueOf(args[0].toString());
}
try {
m.invoke(invokeObj, args);
flag = true;
} catch (IllegalArgumentException e) {
flag = false;
e.printStackTrace();
} catch (IllegalAccessException e) {
flag = false;
e.printStackTrace();
} catch (InvocationTargetException e) {
flag = false;
e.printStackTrace();
}
}
}
}
}
return flag;
}
/**
* 判断文件是否存在
*
* @param fileName
* @param dir
* @return
*/
public static boolean isFileExist(String fileName, String dir) {
File files = new File(dir + fileName);
return (files.exists()) ? true : false;
}
/**
* 获得随机文件名,保证在同一个文件夹下不同名
*
* @param fileName
* @param dir
* @return
*/
public static String getRandomName(String fileName, String dir) {
String[] split = fileName.split("\\.");// 将文件名已.的形式拆分
String extendFile = "." + split[split.length - 1].toLowerCase(); // 获文件的有效后缀
Random random = new Random();
int add = random.nextInt(1000000); // 产生随机数10000以内
String ret = add + extendFile;
while (isFileExist(ret, dir)) {
add = random.nextInt(1000000);
ret = fileName + add + extendFile;
}
return ret;
}
/**
* 创建缩略图
*
* @param file
* 上传的文件流
* @param height
* 最小的尺寸
* @throws IOException
*/
public static void createMiniPic(File file, float width, float height) throws IOException {
Image src = javax.imageio.ImageIO.read(file); // 构造Image对象
int old_w = src.getWidth(null); // 得到源图宽
int old_h = src.getHeight(null);
int new_w = 0;
int new_h = 0; // 得到源图长
float tempdouble;
if (old_w >= old_h) {
tempdouble = old_w / width;
} else {
tempdouble = old_h / height;
}
if (old_w >= width || old_h >= height) { // 如果文件小于锁略图的尺寸则复制即可
new_w = Math.round(old_w / tempdouble);
new_h = Math.round(old_h / tempdouble);// 计算新图长宽
while (new_w > width && new_h > height) {
if (new_w > width) {
tempdouble = new_w / width;
new_w = Math.round(new_w / tempdouble);
new_h = Math.round(new_h / tempdouble);
}
if (new_h > height) {
tempdouble = new_h / height;
new_w = Math.round(new_w / tempdouble);
new_h = Math.round(new_h / tempdouble);
}
}
BufferedImage tag = new BufferedImage(new_w, new_h, BufferedImage.TYPE_INT_RGB);
tag.getGraphics().drawImage(src, 0, 0, new_w, new_h, null); // 绘制缩小后的图
FileOutputStream newimage = new FileOutputStream(file); // 输出到文件流
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(newimage);
JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(tag);
param.setQuality((float) (100 / 100.0), true);// 设置图片质量,100最大,默认70
encoder.encode(tag, param);
encoder.encode(tag); // 将JPEG编码
newimage.close();
}
}
/**
* 判断文件类型是否是合法的,就是判断allowTypes中是否包含contentType
*
* @param contentType
* 文件类型
* @param allowTypes
* 文件类型列表
* @return 是否合法
*/
public static boolean isValid(String contentType, String[] allowTypes) {
if (null == contentType || "".equals(contentType)) {
return false;
}
for (String type : allowTypes) {
if (contentType.equals(type)) {
return true;
}
}
return false;
}
/**
* 多文件压缩
*
* <pre>
* Example :
* ZipOutputStream zosm = new ZipOutputStream(new FileOutputStream("c:/b.zip"));
* zipFiles(zosm, new File("c:/com"), "");
* zosm.close();
* </pre>
*
* @param zosm
* @param file
* @param basePath
* @throws IOException
*/
public static void compressionFiles(ZipOutputStream zosm, File file, String basePath) {
if (file.isDirectory()) {
File[] files = file.listFiles();
try {
zosm.putNextEntry(new ZipEntry(basePath + "/"));
} catch (IOException e) {
e.printStackTrace();
}
basePath = basePath + (basePath.length() == 0 ? "" : "/") + file.getName();
for (File f : files) {
compressionFiles(zosm, f, basePath);
}
} else {
FileInputStream fism = null;
BufferedInputStream bism = null;
try {
byte[] bytes = new byte[1024];
fism = new FileInputStream(file);
bism = new BufferedInputStream(fism, 1024);
basePath = basePath + (basePath.length() == 0 ? "" : "/") + file.getName();
zosm.putNextEntry(new ZipEntry(basePath));
int count;
while ((count = bism.read(bytes, 0, 1024)) != -1) {
zosm.write(bytes, 0, count);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (bism != null) {
try {
bism.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (fism != null) {
try {
fism.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
/**
* 解压缩zip文件
*
* @param zipFileName
* 压缩文件
* @param extPlace
* 解压的路径
*/
public static boolean decompressionZipFiles(String zipFileName, String extPlace) {
boolean flag = false;
try {
unZip(zipFileName,extPlace);
flag = true;
} catch (RuntimeException e) {
e.printStackTrace();
}
return flag;
// java.util.zip.ZipInputStream in = null;
// java.util.zip.ZipEntry entry = null;
// FileOutputStream os = null;
// try {
// in = new java.util.zip.ZipInputStream(new FileInputStream(zipFileName));
// while ((entry = in.getNextEntry()) != null) {
// String entryName = entry.getName();
// int end = entryName.lastIndexOf("/");
// String name = "";
// if (end != -1) {
// name = entryName.substring(0, end);
// }
// File file = new File(extPlace + name);
// if (!file.exists()) {
// file.mkdirs();
// }
// if (entry.isDirectory()) {
// in.closeEntry();
// continue;
// } else {
// os = new FileOutputStream(extPlace + entryName);
// byte[] buf = new byte[1024];
// int len;
// while ((len = in.read(buf)) > 0) {
// os.write(buf, 0, len);
// }
// in.closeEntry();
// }
// }
// flag = true;
// } catch (FileNotFoundException e1) {
// flag = false;
// e1.printStackTrace();
// } catch (IOException e1) {
// flag = false;
// e1.printStackTrace();
// } finally {
// if (in != null) {
// try {
// in.close();
// } catch (IOException e) {
// e.printStackTrace();
// }
// }
// if (os != null) {
// try {
// os.close();
// } catch (IOException e) {
// e.printStackTrace();
// }
// }
// }
}
/**
* 解压缩rar文件
*
* @param rarFileName
* @param extPlace
*/
public static boolean decompressionRarFiles(String rarFileName, String extPlace) {
boolean flag = false;
Archive archive = null;
File out = null;
File file = null;
File dir = null;
FileOutputStream os = null;
FileHeader fh = null;
String path, dirPath = "";
try {
file = new File(rarFileName);
archive = new Archive(file);
} catch (RarException e1) {
e1.printStackTrace();
} catch (IOException e1) {
e1.printStackTrace();
} finally {
if (file != null) {
file = null;
}
}
if (archive != null) {
try {
fh = archive.nextFileHeader();
while (fh != null) {
path = (extPlace + fh.getFileNameString().trim()).replaceAll("\\\\", "/");
int end = path.lastIndexOf("/");
if (end != -1) {
dirPath = path.substring(0, end);
}
try {
dir = new File(dirPath);
if (!dir.exists()) {
dir.mkdirs();
}
} catch (RuntimeException e1) {
e1.printStackTrace();
} finally {
if (dir != null) {
dir = null;
}
}
if (fh.isDirectory()) {
fh = archive.nextFileHeader();
continue;
}
out = new File(extPlace + fh.getFileNameString().trim());
try {
os = new FileOutputStream(out);
archive.extractFile(fh, os);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (RarException e) {
e.printStackTrace();
} finally {
if (os != null) {
try {
os.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (out != null) {
out = null;
}
}
fh = archive.nextFileHeader();
}
} catch (RuntimeException e) {
e.printStackTrace();
} finally {
fh = null;
if (archive != null) {
try {
archive.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
flag = true;
}
return flag;
}
private static void getDir(String directory, String subDirectory){
String dir[];
File fileDir = new File(directory);
try {
if (subDirectory == "" && fileDir.exists() != true)
fileDir.mkdir();
else if (subDirectory != "") {
dir = subDirectory.replace('\\', '/').split("/");
for (int i = 0; i < dir.length; i++) {
File subFile = new File(directory + File.separator + dir[i]);
if (subFile.exists() == false)
subFile.mkdir();
directory += File.separator + dir[i];
}
}
}catch (Exception ex) {
System.out.println(ex.getMessage());
}
}
/**
*
* @param zipFileNaame being unzip file including file name and path ;
* @param outputDirectory unzip files to this directory
*
*/
public static void unZip(String zipFileName, String outputDirectory){
try {
ZipFile zipFile = new ZipFile(zipFileName);
java.util.Enumeration e = zipFile.getEntries();
ZipEntry zipEntry = null;
getDir(outputDirectory, "");
while (e.hasMoreElements()) {
zipEntry = (ZipEntry) e.nextElement();
//System.out.println("unziping " + zipEntry.getName());
if (zipEntry.isDirectory()) { //如果得到的是个目录,
String name = zipEntry.getName(); // 就创建在指定的文件夹下创建目录
name = name.substring(0, name.length() - 1);
File f = new File(outputDirectory + File.separator + name);
f.mkdir();
//System.out.println("创建目录:" + outputDirectory + File.separator + name);
}
else {
String fileName = zipEntry.getName();
fileName = fileName.replace('\\', '/');
// System.out.println("测试文件1:" +fileName);
if (fileName.indexOf("/") != -1){
getDir(outputDirectory,
fileName.substring(0, fileName.lastIndexOf("/")));
//System.out.println("文件的路径:"+fileName);
fileName=fileName.substring(fileName.lastIndexOf("/")+1,fileName.length());
}
File f = new File(outputDirectory + File.separator + zipEntry.getName());
f.createNewFile();
InputStream in = zipFile.getInputStream(zipEntry);
FileOutputStream out=new FileOutputStream(f);
byte[] by = new byte[1024];
int c;
while ( (c = in.read(by)) != -1) {
out.write(by, 0, c);
}
out.close();
in.close();
}
}
}catch (Exception ex) {
System.out.println(ex.getMessage());
}
}
/**
* this mothed will unzip all the files which in your specifeid folder;
* @param filesFolder
* @param outputDirectory
*/
public static void unzipFiles(String filesFolder ,String outputDirectory){
File zipFolder=new File (filesFolder);
String zipFiles [];
String zipFileAbs;
try{
zipFiles=zipFolder.list();
for(int i=0;i<zipFiles.length;i++){
if(zipFiles[i].length()==(zipFiles[i].lastIndexOf(".zip")+4)){//判断是不是zip包
zipFileAbs=filesFolder+File.separator+zipFiles[i];
unZip(zipFileAbs,outputDirectory);
}
}
}catch (SecurityException ex){
ex.printStackTrace();
}
}
public static void main(String[] ar) throws RarException, IOException {
String s = null;
s.length();
unzipFiles("K:\\song","K:\\song\\song");
}
}
分享到:
相关推荐
java 文件处理工具类 java 文件处理工具类java 文件处理工具类java 文件处理工具类java 文件处理工具类 java 文件处理工具类java 文件处理工具类java 文件处理工具类java 文件处理工具类 java 文件处理工具类java ...
java 文件处理工具类 java 文件处理工具类java 文件处理工具类 java 文件处理工具类java 文件处理工具类 java 文件处理工具类java 文件处理工具类 java 文件处理工具类java 文件处理工具类 java 文件处理工具类java ...
在网上找的关于java文件处理的一些有用的方法
提供java中对文件类的各种基本操作,主要包括获取文件的后缀名称,读取文件内容,写入文件内容,拷贝文件,将文件转换为二进制数组等操作,转换为Blob格式类等操作
Java读取大文件的处理 Java读取大文件的处理是Java编程中的一项重要技术,特别是在处理大文件时需要注意性能和响应速度。下面我们将对Java读取大文件的处理技术进行详细的介绍。 标题解释 Java读取大文件的处理是...
此文件包含常用文件处理方法,其中包含文件压缩,递归删除,图片处理等等,语言基于java。
java大批量文件处理
本项目“JAVA对音频文件处理程序”聚焦于读取音频文件,执行降分贝操作,然后将处理后的音频保存为新的文件。这里我们将深入探讨相关的关键知识点。 首先,Java提供了一个强大的包`javax.sound.sampled`来处理音频...
本项目“Large-File-Processing-master_javanio_java大文件处理_”显然专注于通过Java NIO实现大文件处理,下面我们将详细探讨相关的知识点。 1. **Java NIO基础**:NIO的核心组件包括通道(Channels)、缓冲区...
2. **Java文件下载**:在Java Web开发中,服务器端通常使用Servlet或Controller来处理文件下载请求。这些组件会根据客户端请求,读取文件内容,设置合适的HTTP响应头(如Content-Type,Content-Disposition等),并...
里面包含了高效处理文件流的一个java文件,工作时总会用到 个人原创 请使用者标明作者信息 谢谢 oneRose 奉献(下载后的朋友们给点意见 谢谢)
Java 文件上传程序是指使用 Java 语言编写的文件上传程序,负责接收和处理客户端上传的文件。以下是 Java 文件上传程序的相关知识点: 1. 服务器端编程:Java 文件上传程序的服务器端使用 Java 语言编写,主要使用 ...
java 处理并记录日志文件 *java 处理并记录日志文件 *java 处理并记录日志文件 *java 处理并记录日志文件 *java 处理并记录日志文件 *java 处理并记录日志文件 *java 处理并记录日志文件 *java 处理并记录日志文件 *...
Java文件分割压缩是一种常见的操作,尤其在处理大数据或者网络传输时非常有用,因为单个大文件可能会导致处理效率低或传输困难。以下是一些相关的Java编程知识点: 1. **文件I/O操作**:在Java中,`java.io`包提供...
在文件处理过程中,性能优化也是一个重要的话题。例如,使用缓冲区可以减少磁盘I/O次数,提高读写速度;使用多线程可以并发处理多个子文件,进一步提升效率。这些高级技巧在实际项目中非常关键,学生在实验中可以...
用不同方法实现txt文件的读取,并且可以实现step文件的读入
在Java编程语言中,文件读取是常见的任务,可以用于处理各种类型的数据,如文本、图像、音频等。本文将详细介绍Java中四种不同的文件读取方法:...理解这些基本概念可以帮助你编写出更加高效和灵活的Java文件操作程序。
总的来说,通过Java读取文件头内容判断文件类型是一种实用的技术,尤其在处理未知或不安全的文件时。理解并掌握这个方法,能够帮助我们在实际开发中更好地处理各种文件操作,提高程序的健壮性和安全性。
在Java中处理CHM文件,通常是为了在不支持或没有CHM查看器的环境下访问这些内容,或者为了将CHM内容集成到其他应用或网站中。 要实现这个功能,我们需要了解几个关键知识点: 1. **CHM文件结构**:CHM文件由多个...
在Java编程语言中,分割大文件是一项常见的任务,特别是在处理大量数据或需要分批传输大文件的场景下。本文将详细介绍如何使用Java将一个大文件按照特定条件(如文件大小或生成日期)分割成多个小文件。 首先,我们...