`

java 获取指定目录下的所有文件

阅读更多

java ,如何获取指定目录下的所有文件呢?

看代码:

/***
	 * 获取指定目录下的所有的文件(不包括文件夹),采用了递归
	 * 
	 * @param obj
	 * @return
	 */
	public static ArrayList<File> getListFiles(Object obj) {
		File directory = null;
		if (obj instanceof File) {
			directory = (File) obj;
		} else {
			directory = new File(obj.toString());
		}
		ArrayList<File> files = new ArrayList<File>();
		if (directory.isFile()) {
			files.add(directory);
			return files;
		} else if (directory.isDirectory()) {
			File[] fileArr = directory.listFiles();
			for (int i = 0; i < fileArr.length; i++) {
				File fileOne = fileArr[i];
				files.addAll(getListFiles(fileOne));
			}
		}
		return files;
	}

 说明:上述方法采用了递归,所以包含子目录下的子目录中的文件。。。

测试代码:

@Test
	public  void test_getListFiles(){
		ArrayList<File> files=FileUtils.getListFiles("d:\\Temp\\a\\a");
		SystemUtil.printFilesFilePath(files);
	}

 输出结果:

d:\Temp\a\a\divided\merged\oracle学习笔记.doc

d:\Temp\a\a\divided\oracle学习笔记.doc_1_3kldv

d:\Temp\a\a\divided\oracle学习笔记.doc_2_3kldv

d:\Temp\a\a\divided\oracle学习笔记.doc_3_3kldv

d:\Temp\a\a\oracle学习笔记.doc

 

过滤前缀(只是获取指定目录下的文件,没有递归):

/***
	 * 
	 * @param path
	 * @param prefixStr
	 *            :前缀名
	 * @return
	 */
	public static File[] getFilesByPathPrefix(File path, final String prefixStr) {
		File[] fileArr = path.listFiles(new FilenameFilter() {
			@Override
			public boolean accept(File dir, String name) {
				// System.out.println("prefixStr:"+prefixStr);
				if ((ValueWidget.isNullOrEmpty(prefixStr) || (dir.isDirectory() && name
						.startsWith(prefixStr)))) {
					return true;
				} else {
					return false;
				}
			}
		});
		return fileArr;

	}
/***
	 * 前缀名
	 * 
	 * @param pathStr
	 * @param prefixStr
	 * @return
	 */
	public static File[] getFilesByPathAndPrefix(String pathStr,
			final String prefixStr) {
		File path = new File(pathStr);
		return getFilesByPathPrefix(path, prefixStr);
	}

 

过滤后缀名(只是获取指定目录下的文件,没有递归):

/***
	 * 
	 * @param path
	 * @param prefixStr
	 *            :后缀名
	 * @return
	 */
	public static File[] getFilesByPathAndSuffix(File path,
			final String sufixStr) {
		File[] fileArr = path.listFiles(new FilenameFilter() {
			@Override
			public boolean accept(File dir, String name) {
				// System.out.println("prefixStr:"+prefixStr);
				if ((ValueWidget.isNullOrEmpty(sufixStr) || (dir.isDirectory() && name
						.endsWith(sufixStr)))) {
					return true;
				} else {
					return false;
				}
			}
		});
		return fileArr;

	}

/***
	 * 后缀名
	 * 
	 * @param pathStr
	 * @param sufixStr
	 * @return
	 */
	public static File[] getFilesByPathAndSuffix(String pathStr,
			final String sufixStr) {
		File path = new File(pathStr);
		return getFilesByPathAndSuffix(path, sufixStr);
	}

 

1
7
分享到:
评论
1 楼 plawy 2014-05-26  
/*简单说明下,files就是你需要的那个指定类型文件的file对象list,
*你需要知道具体文件名或者文件路径或者文件大小等,自己通过File的API去取,比如:file.getName();file.getAbsolutePath()……
*files:不要跟我说你直接传null啊
*suffixs:文件后缀,注意全是小写,不包含点,比如:rar,text等,支持* 或者空list,后缀lsit为空我就认为是不过滤后缀
* path:任意路径
*/
public static List<File> getAllFiles(List<File> files,
List<String> suffixs, String path) {
File fileT = new File(path);
if (fileT.exists()) {
if (fileT.isDirectory()) {
for (File f : fileT.listFiles()) {
files = getAllFiles(files, suffixs, f.getAbsolutePath());
}
} else {
//被没后缀的文件坑过,所以加了无后缀文件判断
if (suffixs.size() == 0
|| suffixs.contains("*")
|| (fileT.getName().indexOf(".") != -1 && suffixs
.contains(fileT.getName().split("\\.")[1]
.toLowerCase()))) {
files.add(fileT);
}
}
}
return files;
}

相关推荐

Global site tag (gtag.js) - Google Analytics