package com.zqk.util;
import java.io.BufferedReader;
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.InputStreamReader;
import java.io.OutputStreamWriter;
/**
* @author qeekey
* @创建时间:2010-9-9 下午03:03:13
* 类说明 文件处理工具类
* Description:实现文件的简单处理,复制文件、目录等
*/
public class FileUtil {
private String ENCODING ="gbk"; //字符编码
/***
* 读文件
* @param filename
* @return 文件内容
* @throws Exception
*/
public String ReadFile(String filename) throws Exception {
StringBuffer filebuf = new StringBuffer();
File file = new File(filename);
if (file.isFile() && file.exists()) {
InputStreamReader read = new InputStreamReader(new FileInputStream(file), ENCODING);
BufferedReader in = new BufferedReader(read);
String line1;
while ((line1 = in.readLine()) != null) {
filebuf.append(line1).append("\r\n");
}
read.close();
in.close();
}
return filebuf.toString();
}
/***
* 写文件 这种输出方法可以忽略平台目录问题,在windows linux下都可完美运行
* @param content
* @param filename
* @throws Exception
*/
public void WriteFile(String content, String filename) throws Exception {
File file = new File(filename);
StringBuffer jspbuff = new StringBuffer();
jspbuff.append(content);
OutputStreamWriter out = new OutputStreamWriter( new FileOutputStream(file),ENCODING);
out.write(jspbuff.toString());
out.flush();
out.close();
}
/**
* 复制目录下的文件(不包括该目录)到指定目录,会连同子目录一起复制过去。
* @param targetFile
* @param path
*/
public static void copyFileFromDir(String targetDir, String path) {
File file = new File(path);
createFile(targetDir, false);
if (file.isDirectory()) {
copyFileToDir(targetDir, listFile(file));
}
}
/**
* 复制目录下的文件(不包含该目录和子目录,只复制目录下的文件)到指定目录。
* @param targetDir
* @param path
*/
public static void copyFileOnly(String targetDir, String path) {
File file = new File(path);
File targetFile = new File(targetDir);
if (file.isDirectory()) {
File[] files = file.listFiles();
for (File subFile : files) {
if (subFile.isFile()) {
copyFile(targetFile, subFile);
}
}
}
}
/**
* 复制目录到指定目录。targetDir是目标目录,path是源目录。 该方法会将path以及path下的文件和子目录全部复制到目标目录
* @param targetDir
* @param path
*/
public static void copyDir(String targetDir, String path) {
File targetFile = new File(targetDir);
createFile(targetFile, false);
File file = new File(path);
if (targetFile.isDirectory() && file.isDirectory()) {
copyFileToDir(targetFile.getAbsolutePath() + "/" + file.getName(),
listFile(file));
}
}
/**
* 复制一组文件到指定目录。targetDir是目标目录,filePath是需要复制的文件路径
* @param targetDir
* @param filePath
*/
public static void copyFileToDir(String targetDir, String... filePath) {
if (targetDir == null || "".equals(targetDir)) {
System.out.println("参数错误,目标路径不能为空");
return;
}
File targetFile = new File(targetDir);
if (!targetFile.exists()) {
targetFile.mkdir();
} else {
if (!targetFile.isDirectory()) {
System.out.println("参数错误,目标路径指向的不是一个目录!");
return;
}
}
for (String path : filePath) {
File file = new File(path);
if (file.isDirectory()) {
copyFileToDir(targetDir + "/" + file.getName(), listFile(file));
} else {
copyFileToDir(targetDir, file, "");
}
}
}
/**
* 复制文件到指定目录。targetDir是目标目录,file是源文件名,newName是重命名的名字。
* @param targetFile
* @param file
* @param newName
*/
public static void copyFileToDir(String targetDir, File file, String newName) {
String newFile = "";
if (newName != null && !"".equals(newName)) {
newFile = targetDir + "/" + newName;
} else {
newFile = targetDir + "/" + file.getName();
}
File tFile = new File(newFile);
copyFile(tFile, file);
}
/**
* 复制文件。targetFile为目标文件,file为源文件
* @param targetFile
* @param file
*/
public static void copyFile(File targetFile, File file) {
if (targetFile.exists()) {
//System.out.println("文件" + targetFile.getAbsolutePath()+ "已经存在,删除该文件!");
//return;
targetFile.delete();
}
createFile(targetFile, true);
//System.out.println("复制文件" + file.getAbsolutePath() + "到" + targetFile.getAbsolutePath());
try {
int bytesum = 0;
int byteread = 0;
InputStream inStream = new FileInputStream(file); //读入原文件
FileOutputStream fs = new FileOutputStream(targetFile);
byte[] buffer = new byte[1024];
while ( (byteread = inStream.read(buffer)) != -1) {
bytesum += byteread; //字节数 文件大小
fs.write(buffer, 0, byteread);
}
inStream.close();
/*
InputStream is = new FileInputStream(file);
FileOutputStream fos = new FileOutputStream(targetFile);
byte[] buffer = new byte[1024];
while (is.read(buffer) != -1) {
fos.write(buffer);
}
is.close();
fos.close();
*/
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
public static String[] listFile(File dir) {
String absolutPath = dir.getAbsolutePath();
String[] paths = dir.list();
String[] files = new String[paths.length];
for (int i = 0; i < paths.length; i++) {
files[i] = absolutPath + "/" + paths[i];
}
return files;
}
public static void createFile(String path, boolean isFile) {
createFile(new File(path), isFile);
}
public static void createFile(File file, boolean isFile) {
if (!file.exists()) {
if (!file.getParentFile().exists()) {
createFile(file.getParentFile(), false);
} else {
if (isFile) {
try {
file.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
} else {
file.mkdir();
}
}
}
}
public static void deleteDir(File dir) {
if (dir == null || !dir.exists() || !dir.isDirectory())
return; // 检查参数
for (File file : dir.listFiles()) {
if (file.isFile())
file.delete(); // 删除所有文件
else if (file.isDirectory())
deleteDir(file); // 递规的方式删除文件夹
}
dir.delete();// 删除目录本身
}
/***
* 写文件 , 这种输出方法可以忽略平台目录问题,在windows linux下都可完美运行
* @param content
* @param filename
* @throws Exception
*/
public static void WriteFile(byte[] content, String filename) {
File file = new File(filename);
try {
FileOutputStream fos = new FileOutputStream( filename );
try {
fos.write(content);
fos.flush();
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}