Java 静态方法返回空hashmap

Java 静态方法返回空hashmap,java,hashmap,Java,Hashmap,我有一些代码,其中有2个类,A和util类,以及静态方法B。类B有一个由A调用的静态方法。这个静态方法返回一个hashmap;虽然映射是通过clas B中的静态方法正确构建的,但当我从A调用此B方法时,映射是空的。有什么想法吗 下面是类B中正确构建映射的静态方法 package fileutils; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java

我有一些代码,其中有2个类,A和util类,以及静态方法B。类B有一个由A调用的静态方法。这个静态方法返回一个hashmap;虽然映射是通过clas B中的静态方法正确构建的,但当我从A调用此B方法时,映射是空的。有什么想法吗

下面是类B中正确构建映射的静态方法

package fileutils;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Map;
import java.util.jar.JarEntry;
import java.util.jar.JarFile;
import com.google.common.io.Files;

public class JarFileUtils {
    //Returns the sql queries as a MAP
public static Map<String, String> getSQLs(String jarFileFullPath){  
    Map<String, String> sqlData = new HashMap<String, String>();
    try {
         JarFile jarFile = new JarFile(jarFileFullPath);
         Enumeration enumeration = jarFile.entries();
         while (enumeration.hasMoreElements()){
             sqlData = getSqlDataHelper(enumeration.nextElement(), jarFile);
         }
         jarFile.close();      
    } catch (IOException e) {
        e.printStackTrace();
    }
    return sqlData;
}

//Helper to fetch SQL info
private static Map<String, String> getSqlDataHelper(Object obj, JarFile jarFile) 
{ Map<String, String> sqls = new HashMap<String, String>();
  JarEntry entry = (JarEntry)obj;

  String path = "/"+entry.getName();
  if(Files.getFileExtension(path).equalsIgnoreCase("sql")){
    InputStream input;
    try {
        input = jarFile.getInputStream(entry);
        sqls.put(Files.getNameWithoutExtension(path), readSqlFile(input));   
    } catch (IOException e) {
        e.printStackTrace();        
    }
  }
  System.out.println(sqls.toString());
  return sqls;      
}

//Reads the given SQL file
private static String readSqlFile(InputStream input) throws IOException {
      InputStreamReader isr = new InputStreamReader(input);
      BufferedReader reader = new BufferedReader(isr);
      StringBuilder sqlQuery = new StringBuilder();
      String line;
      while ((line = reader.readLine()) != null) {
          sqlQuery.append(line);
          sqlQuery.append("\n");
      }
      reader.close();
      return sqlQuery.toString();
    }
}
下面是我从类A调用上述静态方法的地方。出于某种原因,此映射的大小为零

//Get the list of SQLs in the jar file
    Map<String,String> sqlsExtracted = JarFileUtils.getSQLs(currentProjectFullPath);
    System.out.println("size = "+currentProjectFullPath+" = "+sqlsExtracted.size());
请告知

谢谢

添加我的评论作为可能的答案,因为它可能指向问题


getSQLs正在遍历jar文件中的每个条目,但只返回最后一个条目的结果。也许最后一个条目不包含任何sql文件?

向我们展示一些代码,不要对新手太苛刻,但我们需要看到一些复制您所看到的代码示例。很难仅凭您的描述就推断出发生了什么。代码是共享的,变量“sqls”未定义。此代码是否正常工作?请使用一些调试语句来验证控制流并查看发生了什么。