最近有个需求要去将一个属性值转换为其对应的代号,本来想直接在spring中以注入Map的形式去匹配key的值得出相应的value值,但是要匹配的分类和每个分类中的类别是在太多,就决定使用JSON的方式,将其都记录在文件里,然后写个工具类在其static代码块中做读取工具,这样在生命周期内就可以只读取一次文件了,减少系统消耗(理解不深我是这么想的)
但是问题出现了,我按照传统的读取文件方式在测试时可以正确读取但是启动javaWeb项目后直接报错了,下边是一开始的代码:
static {
System.out.println("1");
File file=null;
BufferedReader reader=null;
String lastStr="";
try {
String path=ConvertType2Code.class.getClassLoader().getResource("config/codeDirec.json").getPath();
file=new File(path);
reader=new BufferedReader(new FileReader(file));
String tempStr=null;
while ((tempStr=reader.readLine())!=null){
lastStr+=tempStr;
}
reader.close();
}catch (Exception e){
e.printStackTrace();
}finally {
if(reader!=null){
try {
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
jsonObject=JSONObject.fromObject(lastStr);
}
从代码上来说没有毛病的好不好 但是一开始调用就说累无法初始化呢,然后classNotDef这种的错。
最后看了hibernate 还有别的读取.property
文件代码用了另一个方式,发现就可以了 找了半天也没发现原因,望有知道的道友解答下
static {
String lastStr="";
try{
InputStream inputStream=ConvertType2Code.class.getClassLoader().getResourceAsStream("config/codeDirec.json");
BufferedReader bf=new BufferedReader(new InputStreamReader(inputStream,"utf-8"));
String tempStr=null;
while ((tempStr=bf.readLine())!=null){
lastStr+=tempStr;
}
bf.close();
}catch (Exception e){
e.printStackTrace();
}
jsonObject=JSONObject.fromObject(lastStr);
}