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 = getTargetFiles(new
// File(System.getProperty("user.dir")));
File[] file = getJavaFiles(
new
File(System.getProperty(
"user.dir"
)));
for
(File f : file) {
System.out.println(f);
}
System.out.println(Arrays.asList(file));
}
}