您的位置:首页 > 编程语言 > Java开发

java文件操作类——递归删除,显示子目录

2013-08-31 19:25 302 查看
package day01;

import java.io.File;
import java.io.FileFilter;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.util.ArrayList;
import java.util.List;

public class FileUtils {
/**
* 列出指定目录下(包括其子目录)的所有文件
*
* @param dir
* @throws IOException
*/
public static void listDirectory(File dir) {
if (!dir.exists()) {
throw new IllegalArgumentException("目录:" + dir + "不存在");
}
if (!dir.isDirectory()) {
throw new IllegalArgumentException(dir + "不是目录");
}
File[] subs = dir.listFiles();
if (subs != null && subs.length > 0) {
for (File sub : subs) {
if (sub.isDirectory()) {
listDirectory(sub);
} else {
System.out.println(sub);
}
}
}
}

/**
* 删除指定目录及其包含的所有内容
*
* @param dir
* @throws IOException
*/
public static void deleteDirectory(File dir) throws IOException {
if (!dir.exists()) {
throw new IllegalArgumentException("目录:" + dir + "不存在");
}
if (!dir.isDirectory()) {
throw new IllegalArgumentException(dir + "不是目录");
}
File[] subs = dir.listFiles();
if (subs != null && subs.length > 0) {
for (File sub : subs) {
if (sub.isDirectory()) {
deleteDirectory(sub);
} else {
System.out.println(sub);
if (!sub.delete()) {
throw new IOException("无法删除文件:" + sub);
}
}
}
}
System.out.println(dir);
if (!dir.delete()) {
throw new IOException("无法删除目录:" + dir);
}
}

/**
* 列出指定目录下指定扩展名的所有文件
*
* @param dir
* @param extensions
* @param recursive
* @return
*/
public static List<File> listFile(File dir, final String[] extensions,
boolean recursive) {
if (!dir.exists()) {
throw new IllegalArgumentException("目录:" + dir + "不存在");
}
if (!dir.isDirectory()) {
throw new IllegalArgumentException(dir + "不是目录");
}
FileFilter ff = null;
if (extensions == null || extensions.length == 0) {
ff = new FileFilter() {
@Override
public boolean accept(File pathname) {
return true;
}
};
} else {
ff = new FileFilter() {
@Override
public boolean accept(File pathname) {
if (pathname.isDirectory())
return true;
String name = pathname.getName();
for (String ext : extensions) {
if (name.endsWith(ext)) {
return true;
}
}
return false;
}
};
}
return listFile(dir, ff, recursive);
}

public static List<File> listFile(File dir, final String filename,
boolean recursive) {
if (!dir.exists()) {
throw new IllegalArgumentException("目录:" + dir + "不存在");
}
if (!dir.isDirectory()) {
throw new IllegalArgumentException(dir + "不是目录");
}
FileFilter ff = null;
if (filename == null || filename.length() == 0) {
ff = new FileFilter() {
@Override
public boolean accept(File pathname) {
return true;
}
};
} else {
ff = new FileFilter() {
@Override
public boolean accept(File pathname) {
if (pathname.isDirectory())
return true;
String name = pathname.getName();
if (name.indexOf(filename) != -1)
return true;
else
return false;
}
};
}
return listFile(dir, ff, recursive);
}

private static List<File> listFile(File dir, FileFilter ff,
boolean recursive) {
List<File> list = new ArrayList<File>();
File[] subs = dir.listFiles(ff);
if (subs != null && subs.length > 0) {
for (File sub : subs) {
if (sub.isFile()) {
list.add(sub);
} else if (recursive) {
list.addAll(listFile(sub, ff, true));
}
}
}
return list;
}
public static void copyFile(File srcFile, File destFile) throws IOException {
if (!srcFile.exists()) {
throw new IllegalArgumentException("文件:" + srcFile + "不存在");
}
if (!srcFile.isFile()) {
throw new IllegalArgumentException(srcFile + "不是文件");
}
RandomAccessFile srcRaf = new RandomAccessFile(srcFile, "r");
if (!destFile.exists()) {
if (!destFile.createNewFile())
throw new IOException("无法创建文件:" + destFile);
}
RandomAccessFile destRaf = new RandomAccessFile(destFile, "rw");
byte[] buffer = new byte[8 * 1024];
int len = -1;
while ((len = srcRaf.read(buffer)) != -1) {
destRaf.write(buffer, 0, len);
}
srcRaf.close();
destRaf.close();
}

public static void copyDirectory(File srcDir, File destDir)
throws IOException {
if (!srcDir.exists()) {
throw new IllegalArgumentException("文件:" + srcDir + "不存在");
}
if (!srcDir.isDirectory()) {
throw new IllegalArgumentException(srcDir + "不是目录");
}
if (!destDir.exists()) {
if (!destDir.mkdir())
throw new IOException("无法创建目录:" + destDir);
}
File[] subs = srcDir.listFiles();
if (subs != null && subs.length > 0) {
for (File sub : subs) {
if (sub.isFile()) {
copyFile(sub, new File(destDir, sub.getName()));
} else if (sub.isDirectory()) {
copyDirectory(sub, new File(destDir, sub.getName()));
}
}
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: