您的位置:首页 > 其它

文件相关操作工具类

2014-06-26 17:15 309 查看
package com.itjh.javaUtil;

import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

/**
* 文件相关操作辅助类。
*
* @author 宋立君
* @date 2014年06月24日
*/
public class FileUtil {
private static final String FOLDER_SEPARATOR = "/";
private static final char EXTENSION_SEPARATOR = '.';

/**
* 功能:复制文件或者文件夹。
*
* @author 宋立君
* @date 2014年06月24日
* @param inputFile
*            源文件
* @param outputFile
*            目的文件
* @param isOverWrite
*            是否覆盖(只针对文件)
* @throws IOException
*/
public static void copy(File inputFile, File outputFile, boolean isOverWrite)
throws IOException {
if (!inputFile.exists()) {
throw new RuntimeException(inputFile.getPath() + "源目录不存在!");
}
copyPri(inputFile, outputFile, isOverWrite);
}

/**
* 功能:为copy 做递归使用。
*
* @author 宋立君
* @date 2014年06月24日
* @param inputFile
* @param outputFile
* @param isOverWrite
* @throws IOException
*/
private static void copyPri(File inputFile, File outputFile,
boolean isOverWrite) throws IOException {
// 是个文件。
if (inputFile.isFile()) {
copySimpleFile(inputFile, outputFile, isOverWrite);
} else {
// 文件夹
if (!outputFile.exists()) {
outputFile.mkdir();
}
// 循环子文件夹
for (File child : inputFile.listFiles()) {
copy(child,
new File(outputFile.getPath() + "/" + child.getName()),
isOverWrite);
}
}
}

/**
* 功能:copy单个文件
*
* @author 宋立君
* @date 2014年06月24日
* @param inputFile
*            源文件
* @param outputFile
*            目标文件
* @param isOverWrite
*            是否允许覆盖
* @throws IOException
*/
private static void copySimpleFile(File inputFile, File outputFile,
boolean isOverWrite) throws IOException {
// 目标文件已经存在
if (outputFile.exists()) {
if (isOverWrite) {
if (!outputFile.delete()) {
throw new RuntimeException(outputFile.getPath() + "无法覆盖!");
}
} else {
// 不允许覆盖
return;
}
}
InputStream in = new FileInputStream(inputFile);
OutputStream out = new FileOutputStream(outputFile);
byte[] buffer = new byte[1024];
int read = 0;
while ((read = in.read(buffer)) != -1) {
out.write(buffer, 0, read);
}
in.close();
out.close();
}

/**
* 功能:删除文件
*
* @author 宋立君
* @date 2014年06月24日
* @param file
*            文件
*/
public static void delete(File file) {
deleteFile(file);
}

/**
* 功能:删除文件,内部递归使用
*
* @author 宋立君
* @date 2014年06月24日
* @param file
*            文件
* @return boolean true 删除成功,false 删除失败。
*/
private static void deleteFile(File file) {
if (file == null || !file.exists()) {
return;
}
// 单文件
if (!file.isDirectory()) {
boolean delFlag = file.delete();
if (!delFlag) {
throw new RuntimeException(file.getPath() + "删除失败!");
} else {
return;
}
}
// 删除子目录
for (File child : file.listFiles()) {
deleteFile(child);
}
// 删除自己
file.delete();
}

/**
* 从文件路径中抽取文件的扩展名, 例如. "mypath/myfile.txt" -> "txt". * @author 宋立君
*
* @date 2014年06月24日
* @param 文件路径
* @return 如果path为null,直接返回null。
*/
public static String getFilenameExtension(String path) {
if (path == null) {
return null;
}
int extIndex = path.lastIndexOf(EXTENSION_SEPARATOR);
if (extIndex == -1) {
return null;
}
int folderIndex = path.lastIndexOf(FOLDER_SEPARATOR);
if (folderIndex > extIndex) {
return null;
}
return path.substring(extIndex + 1);
}

/**
* 从文件路径中抽取文件名, 例如: "mypath/myfile.txt" -> "myfile.txt"。 * @author 宋立君
*
* @date 2014年06月24日
* @param path
*            文件路径。
* @return 抽取出来的文件名, 如果path为null,直接返回null。
*/
public static String getFilename(String path) {
if (path == null) {
return null;
}
int separatorIndex = path.lastIndexOf(FOLDER_SEPARATOR);
return (separatorIndex != -1 ? path.substring(separatorIndex + 1)
: path);
}

/**
* 功能:保存文件。
*
* @author 宋立君
* @date 2014年06月24日
* @param content
*            字节
* @param file
*            保存到的文件
* @throws IOException
*/
public static void save(byte[] content, File file) throws IOException {
if (file == null) {
throw new RuntimeException("保存文件不能为空");
}
if (content == null) {
throw new RuntimeException("文件流不能为空");
}
InputStream is = new ByteArrayInputStream(content);
save(is, file);
}

/**
* 功能:保存文件
*
* @author 宋立君
* @date 2014年06月24日
* @param streamIn
*            文件流
* @param file
*            保存到的文件
* @throws IOException
*/
public static void save(InputStream streamIn, File file) throws IOException {
if (file == null) {
throw new RuntimeException("保存文件不能为空");
}
if (streamIn == null) {
throw new RuntimeException("文件流不能为空");
}
// 输出流
OutputStream streamOut = null;
// 文件夹不存在就创建。
if (!file.getParentFile().exists()) {
file.getParentFile().mkdirs();
}
streamOut = new FileOutputStream(file);
int bytesRead = 0;
byte[] buffer = new byte[8192];
while ((bytesRead = streamIn.read(buffer, 0, 8192)) != -1) {
streamOut.write(buffer, 0, bytesRead);
}
streamOut.close();
streamIn.close();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐