java常用組件之文件工具 FileUtils

/*
* 創建日期 2005-11-15
*/
package cn.com.skyon.sms.Utils;

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.io.OutputStream;
import java.io.RandomAccessFile;
import java.util.zip.ZipEntry;
import java.util.zip.ZipException;
import java.util.zip.ZipOutputStream;

import org.apache.log4j.Logger;

public class FileUtils
{
private static Logger logger = Logger.getLogger(FileUtils.class);

/**
* 壓縮一組文件成指定文件
*
* @param files
* 需要壓縮的文件
* @param zipFileName
* 壓縮成的文件名
* @param needClear
* 是否刪除原文件
*/
public static void compressFiles(File[] files, String zipFileName,
boolean needClear)
{
File targetFile = new File(zipFileName);
if (targetFile.exists())
{
logger.warn("壓縮文件已存在,重新命名");
compressFiles(files, zipFileName + "-new.zip", needClear);
}
else
{
ZipOutputStream outputStream = null;
try
{
outputStream = new ZipOutputStream(new FileOutputStream(
targetFile));
outputStream.setLevel(9);
for (int i = 0; i < files.length; i++)
{
File tempFile = files[i];
if (tempFile.isDirectory())
{
logger.warn("壓縮文件不能爲文件夾");
continue;
}
ZipEntry entry = new ZipEntry(tempFile.getName());
outputStream.putNextEntry(entry);
InputStream inputStream = new FileInputStream(tempFile);
byte[] buffer = new byte[4096];
int t = 0;
while ((t = inputStream.read(buffer)) != -1)
{
outputStream.write(buffer, 0, t);
}
closeInputStream(inputStream);
}
outputStream.close();
logger.debug("壓縮文件成功!");
}
catch (FileNotFoundException e)
{
logger.warn("指定文件不存在", e);
}
catch (ZipException e)
{
logger.warn("壓縮文件失敗或沒有找到被壓縮文件", e);
}
catch (IOException e)
{
logger.error("IO錯誤", e);
}
finally
{
closeOutputStream(outputStream);
}

if (needClear)
{
for (int i = 0, iLength = files.length; i < iLength; i++)
{
File file = files[i];
if (file.exists() && file.isFile())
{
file.delete();
logger.debug("刪除文件" + file.getName() + "成功");
}
}
}
}
}

/**
* 移動文件到指定文件夾
*
* @param file
* @param targetDir
*/
public static boolean moveFile(File file, File targetDir)
{
if (file == null)return false;
if (targetDir == null)
{
logger.error("目標文件夾不能爲空");
return false;
}
if (!targetDir.exists())targetDir.mkdir();
if (!targetDir.isDirectory())
{
logger.warn("移動目標不是文件夾");
return false;
}
FileOutputStream out = null;
FileInputStream input = null;
try
{
out = new FileOutputStream(new File(targetDir,
file.getName()));
input = new FileInputStream(file);
byte[] buffer = new byte[4096];
int r = 0;
while ((r = input.read(buffer)) != -1)
{
out.write(buffer, 0, r);
}
out.flush();
}
catch (FileNotFoundException e)
{
logger.error("指定文件未找到", e);
}
catch (IOException e)
{
logger.error("IO錯誤", e);
}
finally
{
closeOutputStream(out);
closeInputStream(input);
}
return file.delete();
}

/**
* 關閉輸入流
*
* @param in
*/
public static void closeInputStream(InputStream in)
{
if (in != null)
{
try
{
in.close();
}
catch (IOException e)
{
logger.warn("關閉輸入流失敗", e);
}
finally
{
in = null;
}
}
}

/**
* 關閉輸出流
*
* @param out
*/
public static void closeOutputStream(OutputStream out)
{
if (out != null)
{
try
{
out.close();
}
catch (IOException e)
{
logger.warn("關閉輸出流失敗", e);
}
finally
{
out = null;
}
}
}


/**
*
* @param File
* @return 是否能鎖定文件。
*/
public static final boolean fileIsCanHold(File file )
{
// File file = new File(fileName);
if (file.exists())
{
long size = file.length() ;
long md = file.lastModified() ;
try
{
Thread.sleep(100);
} catch (InterruptedException e)
{
return false ;
}
if (!((file.length()== size) && (md==file.lastModified())))
{
return false ;
}

RandomAccessFile accessFile = null;
try
{
accessFile = new RandomAccessFile(file,"rw");
} catch (FileNotFoundException e1)
{
return false ;
}
finally
{
try
{
if (accessFile!=null) accessFile.close() ;
} catch (IOException e)
{

}
}
return true;
}
return false ;
}

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章