import
java.io.File;
import
java.io.FileFilter;
import
java.util.ArrayList;
import
java.util.Arrays;
import
java.util.List;
/**
*
* @author haoguo
* @version 2014/12/09
*/
public
class JavaFileArray {
/**
* 过滤获取目录与java文件
*/
private
static FileFilter filter =
new FileFilter() {
@Override
public boolean
accept(File pathname) {
return pathname.isDirectory()
|| (pathname.isFile() && pathname.getName().endsWith(
".java"));
}
};
/**
* 默认获取程序路径下的所有java文件列表
*
* @return
*/
public
static List<File> getJavaFilesList() {
return Arrays.asList(getJavaFiles(new
File(System
.getProperty("user.dir"))));
}
/**
* 获取指定的路径path下的所有java文件列表
*
* @param path
* @return
*/
public
static List<File> getJavaFilesList(String path) {
return Arrays.asList(getJavaFiles(new
File(path)));
}
/**
* 获取指定parent下的所有java文件列表
*
* @param parent
* @return
*/
public
static List<File> getJavaFilesList(File parent) {
return Arrays.asList(getJavaFiles(parent));
}
/**
* 默认获取程序路径下的所有java文件File数组
*
* @return
*/
public
static File[] getJavaFiles() {
return getJavaFiles(new
File(System.getProperty("user.dir")));
}
/**
* 获取指定的路径path下的所有java文件File数组
*
* @param path
* @return
*/
public
static File[] getJavaFiles(String path) {
return getJavaFiles(new
File(path));
}
/**
* 获取指定parent下的所有java文件File数组
*
* @param parent
* @return
*/
public
static File[] getJavaFiles(File parent) {
List<File> javaFiles = new
ArrayList<File>();
File[] files = parent.listFiles(new
FileFilter() {
@Override
public boolean
accept(File pathname) {
return pathname.isDirectory()
|| (pathname.isFile() && pathname.getName().endsWith(
".java"));
}
});
for (File file : files) {
if (file.isFile()) {
javaFiles.add(file);
} else
{
File[] subsFiles = getJavaFiles(file);
for (File subFile : subsFiles) {
javaFiles.add(subFile);
}
}
}
return javaFiles.toArray(new
File[0]);
}
public
static File[] getTargetFiles() {
return getTargetFiles(new
File(System.getProperty("user.dir")),
new ArrayList<File>());
}
public
static List<File> getTargetFilesList() {
return Arrays.asList(getTargetFiles());
}
/**
* 采用静态过滤器方式获取parent下的所有java文件File数组
*
* @param parent
* @return
*/
public
static File[] getTargetFiles(File parent, List<File> javaFiles) {
File[] files = parent.listFiles(filter);
for (File file : files) {
if (file.isFile()) {
javaFiles.add(file);
} else
{
getTargetFiles(file, javaFiles);
}
}
return javaFiles.toArray(new
File[0]);
}
/**
* 深度优先搜索
*
* @param parentFile
* @param fileName
* @return
*/
public
static File findDepthFile(File parentFile, String fileName) {
File[] files = parentFile.listFiles();
for (File file : files) {
if (file.isFile()) {
if (file.getName().equals(fileName))
return file;
} else
{
File subFile = findDepthFile(file, fileName);
if (subFile !=
null) {
return subFile;
}
}
}
return null;
}
/**
* 广度(层次)优先搜索
*
* @param parentFile
* @param fileName
* @return
*/
public
static File findBreadthFile(File parentFile, String fileName) {
final String name = fileName;
FileFilter filter = new
FileFilter() {
@Override
public boolean
accept(File pathname) {
return pathname.isDirectory()
|| (pathname.isFile() && pathname.getName()
.equals(name));
}
};
File[] files = parentFile.listFiles(filter);
for (int
i = 0; i < files.length; i++) {
File file = files[i];
if (file.isFile()) {
if (file.getName().equals(fileName)) {
return file;
}
} else
{
File[] tmp = file.listFiles(filter);
if (tmp ==
null || tmp.length ==
0) {
continue;
}
files = Arrays.copyOf(files, files.length + tmp.length);
System.arraycopy(tmp, 0, files, files.length - tmp.length,
tmp.length);
}
}
return null;
}
/**
* 深度优先搜索
*
* @param fileName
* @return
*/
public
static File findDepthFile(String fileName) {
File parentFile = new
File(System.getProperty("user.dir"));
return findDepthFile(parentFile, fileName);
}
/**
* 广度(层次)优先搜索
*
* @param fileName
* @return
*/
public
static File findBreadthFile(String fileName) {
File parentFile = new
File(System.getProperty("user.dir"));
return findBreadthFile(parentFile, fileName);
}
public
static void
main(String[] args) {
File[] file = getJavaFiles(new
File(System.getProperty("user.dir")));
for (File f : file) {
System.out.println(f);
}
System.out.println(Arrays.asList(file));
}
}