首页 资讯 社群 我的社区 搜索

使用java解析INI文件

高大上
2018-09-09 14:52:59

        最近老大让我试着使用java解析INI文件为json。江湖传言有现成的API库可以直接使用。我百度一下,发现基本上都是js或者Python的,java的貌似没有看到。这里发下我的代码,顺便提下其中的一个坑!

        

这个是我用Notepad打开的,上面显示的是35行,其实BufferedReader 在读到第35行是已经读到了null,也就是说它读到的实际行数为34行


下面的完整代码完整的代码

/**
* 思路:一次读一行,读到“【” 就clear jar,读到空白行就clear jso,读到连续空白行就表示要结算数据
* @throws IOException
*/
@Test
public void test3() throws IOException {
JSONObject inifjso = new JSONObject();
URL filepath =DemoApplicationTests.class.getClassLoader().getResource("Report3.ini");
BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(new File(filepath.getFile())),"GBK"));
String str = "";
String inifTitle ="";
String lastStr = "";
int i=0;
JSONArray jar = new JSONArray();
JSONObject jso = new JSONObject();
while ((str =br.readLine())!=null){
if (lastStr.equals(str)){
inifjso.put(inifTitle,jar);
}
if (!str.equals("") &&str.substring(0,1).equals("[") ){//这个判断应该移到下面去,就不用写&&了
inifTitle = str;
jar.clear();
}else if (str.equals("")){
if (jso.size()>0){
jar.add(jso);
}
jso.clear();
}else {
String[] strarr = str.split("=");
if (strarr.length==2){
jso.put(strarr[0],strarr[1]);
}else {
System.out.println("以外情况:"+str);
}
};
lastStr = str;
i++;
}

inifjso.put(inifTitle,jar);
System.out.println(inifjso.toString());
System.out.println("一共读到了"+i+"行");
}



用户评论