递归堆栈不保存哈希图中的更改
Recursive stacks not saving changes in hashmap
我的代码如下
public class FileHandler {
public static void main(String... args) {
File file = new File("C:/Users/TJF22/Desktop/Simple Network 1/alpha 15");
mapFiles(file);
}
public static HashMap<String,File[]> mapFiles(File directory){
File[] inputContents = directory.listFiles();
HashMap<String,File[]> fileMap= new HashMap<String,File[]>();
for (File content : inputContents){
if (content.isDirectory()){
File[] nestedContents = content.listFiles();
if (areAllFiles(nestedContents)){
String key = content.getPath();
fileMap.put(key,nestedContents);
} else {
mapFiles(content);
}
}
}
return fileMap;
}
public static boolean areAllFiles(File[] directory){
for (File files : directory){
if (!files.isFile()){
return false;
}
}
return true;
}
我想要做的是能够递归地遍历给定的输入文件目录,并且对于包含在该输入目录中的文件:
-如果文件是一个目录,并且该目录的所有内容都是文件,则将目录名作为键关联到其中的文件名(作为值)并存储到fileMap
-如果文件是一个目录并且其中包含其他目录,则继续前进,直到找到其中只有文件的目录
-如果文件是文件,则忽略
但我的问题是,当我 return fileMap 时,HashMap 得到一个空的 HashMap,因为出于某种原因,我存储的键值对没有被保存。有帮助吗?
您需要跟踪现有的 HashMap,而不是每次重新调用时都重新创建映射 mapFiles
。
public static HashMap<String,File[]> mapFiles(File directory){
HashMap<String,File[]> fileMap = new HashMap<String,File[]>();
fileMap = mapFiles_Recursive(directory, fileMap);
return fileMap;
}
private static HashMap<String,File[]> mapFiles_Recursive(File directory, HashMap<String,File[]> fileMap) {
File[] inputContents = directory.listFiles();
for (File content : inputContents){
if (content.isDirectory()){
File[] nestedContents = content.listFiles();
if (areAllFiles(nestedContents)){
String key = content.getPath();
fileMap.put(key,nestedContents);
} else {
mapFiles(content, fileMap);
}
}
}
return fileMap;
}
我的代码如下
public class FileHandler {
public static void main(String... args) {
File file = new File("C:/Users/TJF22/Desktop/Simple Network 1/alpha 15");
mapFiles(file);
}
public static HashMap<String,File[]> mapFiles(File directory){
File[] inputContents = directory.listFiles();
HashMap<String,File[]> fileMap= new HashMap<String,File[]>();
for (File content : inputContents){
if (content.isDirectory()){
File[] nestedContents = content.listFiles();
if (areAllFiles(nestedContents)){
String key = content.getPath();
fileMap.put(key,nestedContents);
} else {
mapFiles(content);
}
}
}
return fileMap;
}
public static boolean areAllFiles(File[] directory){
for (File files : directory){
if (!files.isFile()){
return false;
}
}
return true;
}
我想要做的是能够递归地遍历给定的输入文件目录,并且对于包含在该输入目录中的文件:
-如果文件是一个目录,并且该目录的所有内容都是文件,则将目录名作为键关联到其中的文件名(作为值)并存储到fileMap
-如果文件是一个目录并且其中包含其他目录,则继续前进,直到找到其中只有文件的目录
-如果文件是文件,则忽略
但我的问题是,当我 return fileMap 时,HashMap 得到一个空的 HashMap,因为出于某种原因,我存储的键值对没有被保存。有帮助吗?
您需要跟踪现有的 HashMap,而不是每次重新调用时都重新创建映射 mapFiles
。
public static HashMap<String,File[]> mapFiles(File directory){
HashMap<String,File[]> fileMap = new HashMap<String,File[]>();
fileMap = mapFiles_Recursive(directory, fileMap);
return fileMap;
}
private static HashMap<String,File[]> mapFiles_Recursive(File directory, HashMap<String,File[]> fileMap) {
File[] inputContents = directory.listFiles();
for (File content : inputContents){
if (content.isDirectory()){
File[] nestedContents = content.listFiles();
if (areAllFiles(nestedContents)){
String key = content.getPath();
fileMap.put(key,nestedContents);
} else {
mapFiles(content, fileMap);
}
}
}
return fileMap;
}