java读取文件夹下所有文件和目录
以下2中办法核心都是递归,只不过数据返回的不一样,第一种返回路径、子文件夹、子文件,第二种就是文件路径 可以自由扩展
第一种办法
public static JSONArray traverseFolder2(String path) {
JSONArray jsonArray=new JSONArray();
File file = new File(path);
if (file.exists()) {//判断文件是否存在
File[] files = file.listFiles();//获取所有子文件夹
if (null == files || files.length == 0) {
System.out.println("文件夹是空的!");
return null;
} else {
List<File> fileList = new ArrayList<>();//存储所有文件
List<JSONArray> childrens = new ArrayList<>();//存储所有文件夹
JSONObject jsonObject=new JSONObject();
jsonObject.put("path",path);
for (File file2 : files) {
if (!file2.isDirectory()) {//判断是否是文件夹
fileList.add(file2);
} else {
childrens.add(traverseFolder2(file2.getAbsolutePath()));
}
}
jsonObject.put("filelist",fileList);
jsonObject.put("childrens",childrens);
jsonArray.add(jsonObject);
}
} else {
System.out.println("文件不存在!");
}
return jsonArray;
}
第二种办法
第一次new一个空集合放进去就好
public static ArrayList<String> readFiles1(String path, ArrayList<String> fileNameList) {
File file = new File(path);
if (file.isDirectory()) {
File[] files = file.listFiles();
for (int i = 0; i < files.length; i++) {
if (files[i].isDirectory()) {
readFiles1(files[i].getPath(), fileNameList);
} else {
String path1 = files[i].getPath();
String fileName = path1.substring(path1.lastIndexOf("\\") + 1);
fileNameList.add(fileName);
}
}
} else {
String path1 = file.getPath();
String fileName = path1.substring(path1.lastIndexOf("\\") + 1);
fileNameList.add(fileName);
}
return fileNameList;
}
本文参考于:https://blog.csdn.net/u014116780/article/details/84145774
如有更好办法,欢迎指点