如何向Map中放入值

大家看下这段代码有什么问题!
[code="java"]
public Map soureFile(String sourePath) {
Map map = new java.util.HashMap();
File dir = new File(sourePath);
File[] files = dir.listFiles();

    if (files == null){
        return map;
    }

    for (int i = 0; i < files.length; i++) {
        if (files[i].isDirectory()) {
            soureFile(files[i].getAbsolutePath());
        } else {
            String strFileName = files[i].getAbsolutePath();
            System.out.println("---" + strFileName);

            map.put(files[i], strFileName);

        }

    }
          return map
  }

[/code]
但是 我取 map的时候发现 map.size()==0 这是为什么啊!
[b]问题补充:[/b]
大家看下这段代码有什么问题!
[code="java"]
public Map soureFile(String sourePath) {
Map map = new java.util.HashMap();
File dir = new File(sourePath);
File[] files = dir.listFiles();

    if (files == null){
        return map;
    }

    for (int i = 0; i < files.length; i++) {
        if (files[i].isDirectory()) {
            soureFile(files[i].getAbsolutePath());
        } else {
            String strFileName = files[i].getAbsolutePath();
            System.out.println("---" + strFileName);

            map.put(files[i], strFileName);

        }

    }
          return map;
  }

[/code]
但是 我取 map的时候发现 map.size()==0 这是为什么啊!
[b]问题补充:[/b]
System.out.println();打印出来有东西啊!

晕啊,你新建的map都是个局部变量,

你用的又是递归的方式,自然永远也只会返回这个地方

if (files == null){

return map;

}

应该这样,这个Map map = new java.util.HashMap(); 应该是从方法外面传进来

[code="java"]
public Map soureFile(Map map, String sourePath) {

    File dir = new File(sourePath);
    File[] files = dir.listFiles();

    if (files == null){
        return map;
    }

    for (int i = 0; i < files.length; i++) {
        if (files[i].isDirectory()) {
            soureFile(map,files[i].getAbsolutePath());
        } else {
            String strFileName = files[i].getAbsolutePath();
            System.out.println("---" + strFileName);

            map.put(files[i], strFileName);

        }

    }
          return map;
  }

[/code]

你的打印语句能打印出来值吗

[code="java"]map.put(files[i], strFileName); [/code]这里你放入的值是strFileName这个变量应该是文件路径,key是File类型,错应该没有错,但是就是你取的时候map.get(key)里面的key就是得是文件对象File了!

晕啊,你新建的map都是个局部变量,

你用的又是递归的方式,自然永远也只会返回这个地方

if (files == null){

return map;

}

应该这样,这个Map map = new java.util.HashMap(); 应该是从方法外面传进来

[code="java"]
public Map soureFile(Map map, String sourePath) {

    File dir = new File(sourePath);
    File[] files = dir.listFiles();

    if (files == null){
        return map;
    }

    for (int i = 0; i < files.length; i++) {
        if (files[i].isDirectory()) {
            soureFile(map,files[i].getAbsolutePath());
        } else {
            String strFileName = files[i].getAbsolutePath();
            System.out.println("---" + strFileName);

            map.put(files[i], strFileName);

        }

    }
          return map;
  }

[/code]

而且你取出来的应该是循环的最后一个值!