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);
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() + "成功");
}
}
}
}
}
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();
}
public static void closeInputStream(InputStream in)
{
if (in != null)
{
try
{
in.close();
}
catch (IOException e)
{
logger.warn("关闭输入流失败", e);
}
finally
{
in = null;
}
}
}
public static void closeOutputStream(OutputStream out)
{
if (out != null)
{
try
{
out.close();
}
catch (IOException e)
{
logger.warn("关闭输出流失败", e);
}
finally
{
out = null;
}
}
}
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 ;
}
}