JAVA 如何把一个局部变量(Map类型的)的值, 取出来返回给调用者?
JAVA如何把一个局部变量(Map类型的)的值,取出来返回给调用者?我的方法如下://递归遍历给定文件夹下所有的子文件夹和文件,把所得的结果放入Map中并返回public...
JAVA 如何把一个局部变量(Map类型的)的值, 取出来返回给调用者?
我的方法如下:
// 递归遍历给定文件夹下所有的子文件夹和文件,把所得的结果放入Map中并返回
public Map<String, String> iterateFolder(File rootFolder, int level, String month) {
Map<String, String> strMap = new HashMap<String, String>();
if (!rootFolder.isDirectory()) {
System.out.println(rootFolder.getName() + " is not a directory! ");
} else {
String filesFullName[] = new String[1000];
String months = "";
File dirList[] = rootFolder.listFiles();
for (int i = 0; i < dirList.length; i++) {
for (int j = 0; j <= level; j++) {
// System.out.print("-Level-" + level);
}
if (dirList[i].isDirectory()) {
// System.out.println(": <" + dirList[i].getName() + "> ");
level++;
iterateFolder(dirList[i], level, month);
level--;
} else if (dirList[i].isFile() && dirList[i].getName().endsWith(".log")) {
months = dirList[i].getName().substring(dirList[i].getName().lastIndexOf("_") + 1);
if (!"".equals(month) && months.substring(0, 6).equals(month)) {
// System.out.println("The File>>> " + rootFolder + "\\" + dirList[i].getName());
strMap.put(filesFullName[i], rootFolder + "\\" + dirList[i].getName());
System.out.println(strMap.get(filesFullName[i]));
}
}
}
}
if(strMap != null){
return strMap;
}else{
return null;
}
}
可是 我在当前类下的main方法中调用时,发现返回的strMap 这个Map始终为空值,各位高手,能不能告诉小弟,到底是怎么回事呢?我想返回这个值,以便后续处理。 展开
我的方法如下:
// 递归遍历给定文件夹下所有的子文件夹和文件,把所得的结果放入Map中并返回
public Map<String, String> iterateFolder(File rootFolder, int level, String month) {
Map<String, String> strMap = new HashMap<String, String>();
if (!rootFolder.isDirectory()) {
System.out.println(rootFolder.getName() + " is not a directory! ");
} else {
String filesFullName[] = new String[1000];
String months = "";
File dirList[] = rootFolder.listFiles();
for (int i = 0; i < dirList.length; i++) {
for (int j = 0; j <= level; j++) {
// System.out.print("-Level-" + level);
}
if (dirList[i].isDirectory()) {
// System.out.println(": <" + dirList[i].getName() + "> ");
level++;
iterateFolder(dirList[i], level, month);
level--;
} else if (dirList[i].isFile() && dirList[i].getName().endsWith(".log")) {
months = dirList[i].getName().substring(dirList[i].getName().lastIndexOf("_") + 1);
if (!"".equals(month) && months.substring(0, 6).equals(month)) {
// System.out.println("The File>>> " + rootFolder + "\\" + dirList[i].getName());
strMap.put(filesFullName[i], rootFolder + "\\" + dirList[i].getName());
System.out.println(strMap.get(filesFullName[i]));
}
}
}
}
if(strMap != null){
return strMap;
}else{
return null;
}
}
可是 我在当前类下的main方法中调用时,发现返回的strMap 这个Map始终为空值,各位高手,能不能告诉小弟,到底是怎么回事呢?我想返回这个值,以便后续处理。 展开
1个回答
展开全部
你的方法中用了递归,所以要注意变量的恰当使用。
Map<String, String> strMap = new HashMap<String, String>();这句只要出现递归情况都会执行一次,这样strMap 就会不断引用到新建的HashMap,有一种情况,如果递归遍历中出现的最后一次是一个文件夹并且这个文件夹是空的,那么strMap引用到的HashMap(strMap = new HashMap<String, String>();)就会是空的,
Map<String, String> strMap = new HashMap<String, String>();这句只要出现递归情况都会执行一次,这样strMap 就会不断引用到新建的HashMap,有一种情况,如果递归遍历中出现的最后一次是一个文件夹并且这个文件夹是空的,那么strMap引用到的HashMap(strMap = new HashMap<String, String>();)就会是空的,
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询