package demo.io;
import java.io.*;
import java.util.ArrayList;
public class FileTool {
public static void listAll(File dir, int level) {
if (!dir.isDirectory()) {
System.out.println("传入参数为非目录,递归遍历目录失败");
return;
}
System.out.println(getSpace(level) + dir.getName());
level++;
File[] files = dir.listFiles();
for (File f : files) {
if (f.isDirectory()) {
listAll(f, level);
} else {
System.out.println(getSpace(level) + f.getAbsolutePath());
}
}
}
private static String getSpace(int level) {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < level; i++) {
sb.append("\t");
}
return sb.toString();
}
public static void findFile(File dir, String keyword, int level) {
if (!dir.isDirectory()) {
System.out.println("传入参数为非目录,递归查找指定目录下指定关键字文件失败");
return;
}
File[] files = dir.listFiles(new FilterByKeyword(keyword));
for (File f : files) {
if (f.isDirectory()) {
findFile(f, keyword, level);
} else {
System.out.println(getSpace(level) + f.getAbsolutePath());
}
}
}
public static void copyFile(File file, File newFile) {
if (!file.isFile()) {
System.out.println("传入参数为非文件,无法copy");
return;
}
BufferedInputStream bufi = null;
BufferedOutputStream bufo = null;
try {
bufi = new BufferedInputStream(new FileInputStream(file));
bufo = new BufferedOutputStream(new FileOutputStream(newFile));
int len = 0;
byte[] buf = new byte[1024];
while ((len = bufi.read(buf)) != -1) {
bufo.write(buf, 0, len);
bufo.flush();
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (bufi != null)
bufi.close();
if (bufo != null)
bufo.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
public static void copyFileAll(File sourceDir, File destDir) {
destDir.mkdirs();
File[] files = sourceDir.listFiles();
for (File file : files) {
if (file.isDirectory()) {
copyFileAll(file, new File(destDir.getAbsolutePath(), file.getName()));
} else {
copyFile(file, new File(destDir.getAbsolutePath(), file.getName()));
}
}
}
public static void renameToAll(File sourceDir, File destDir) {
destDir.mkdirs();
File[] files = sourceDir.listFiles();
for (File file : files) {
if (file.isDirectory()) {
renameToAll(file, new File(destDir.getAbsolutePath(), file.getName()));
} else {
file.renameTo(new File(destDir, file.getName()));
}
}
sourceDir.delete();
}
public static void deleteAll(File dir) {
if (!dir.isDirectory()) {
System.out.println("传入参数为非目录或者不存在,无法删除");
return;
}
File[] files = dir.listFiles();
for (File f : files) {
if (f.isDirectory()) {
deleteAll(f);
} else {
System.out.println(f + ": " + f.delete());
}
}
System.out.println(dir + ": " + dir.delete());
}
public static void writeSuffixFile(File dir, String suffix, File file) {
ArrayList<String> fileNames = new ArrayList<>();
FilterBySuffix filter = new FilterBySuffix(suffix);
listAll(dir, fileNames, filter);
inputFile(file, fileNames);
}
private static void inputFile(File file, ArrayList<String> fileNames) {
BufferedWriter bufw = null;
try {
bufw = new BufferedWriter(new FileWriter(file));
for (String fileName : fileNames) {
bufw.write(fileName, 0, fileName.length());
bufw.newLine();
bufw.flush();
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (bufw != null) {
bufw.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
private static void listAll(File dir, ArrayList<String> fileNames, FilterBySuffix filter) {
File[] files = dir.listFiles();
for (File file : files) {
if (file.isDirectory()) {
listAll(file, fileNames, filter);
} else {
if (filter.accept(file))
fileNames.add(file.getAbsolutePath());
}
}
}
}
class FilterByKeyword implements FileFilter {
private String suffix;
FilterByKeyword(String suffix) {
this.suffix = suffix;
}
@Override
public boolean accept(File pathname) {
if (pathname.isDirectory())
return true;
else
return pathname.getName().contains(suffix);
}
}
class FilterBySuffix implements FileFilter {
private String suffix;
FilterBySuffix(String suffix) {
this.suffix = suffix;
}
@Override
public boolean accept(File pathname) {
return pathname.getName().endsWith(suffix);
}
}
class FileToolTest {
public static void main(String[] args) {
FileTool.writeSuffixFile(new File("I:\\Test\\3"), ".txt", new File("I:\\Test\\递归获取指定后缀文件写入文本.txt"));
}
}