【发布时间】:2015-07-22 20:09:35
【问题描述】:
我有一些代码,其中有 2 个类,A 和带有静态方法 B 的 util 类。B 类有一个由 A 调用的静态方法。这个静态方法返回一个 hashmap();虽然地图是由 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());
请指教,
谢谢!
【问题讨论】:
-
给我们看一些代码
-
Rookie 不要对你太苛刻,但我们需要看一些代码示例来复制你所看到的内容。仅凭您的描述很难推断出发生了什么。
-
代码在上面共享
-
变量 'sqls' 未定义 这段代码有效吗?
-
放一些调试语句来验证控制流,看看发生了什么。