处理java文件_Java文件处理

/*

* @(#)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 中的方法

*

*

 
 

* Example:

* String[] arr = StringUtils.split("a b,c d,e-f", " ,");

* System.out.println(arr.length);//输出6

*

*

* @param str

* 目标字符串

* @param separatorChars

* 分隔符字符串

* @return 字符串数组

*/

public static String[] split(String str, String separatorChars) {

return StringUtils.split(str, separatorChars);

}

/**

* 调用指定字段的setter方法

*

*

 
 

* Example:

* User user = new User();

* MyUtils.invokeSetMethod("userName", user, new Object[] {"张三"});

*

*

* @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;

}

/**

* 多文件压缩

*

*

 
 

* Example :

* ZipOutputStream zosm = new ZipOutputStream(new FileOutputStream("c:/b.zip"));

* zipFiles(zosm, new File("c:/com"), "");

* zosm.close();

*

*

* @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

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");

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值