ini文件中'#'行后的解析错误

时间:2016-10-11 11:05:00

标签: java parsing ini ini4j

我有一个本地存储的ini file,我试图解析如下:

Ini ini = new Ini(new File("path/to/file")); 
System.out.println(ini.get("header", "key"));

但我不断收到指向ini文件(#)注释行后面的行的解析错误异常消息。这就是我的ini文件:

File.ini

#Tue Oct 11 18:45:03 CST 2016
PVIDNO=PALMUS-00001
PVIDNo=SSI-1
Authentication=VALID
ModelNo=KD03816-B001
PALMUS-ID=73364
PV-ID=PALMUS-01

3 个答案:

答案 0 :(得分:2)

您正在使用来自who-know-where的某些 Ini ;并且Ini-File解析器根本不喜欢包含"#comment"的.ini文件。条目。

所以,你的选择基本上是:

  1. 我先忘了这一点,但也许最好的"选项:不要使用" ini"文件;但改为"属性"文件;这是一个更自然的" Java应用程序的选择。 "内置"支持他们;嘿,"#comments"开箱即用。
  2. 如果 Ini 是"您自己的代码&#34 ;;然后你让自己的代码接受这样的评论
  3. 如果 Ini 来自某个库,则检查该库是否允许影响解析过程以允许此类注释。
  4. 如果图书馆不允许进行此类特殊处理,您还有两个选择:

    1. 留意其他第三方库来解析您的文件
    2. "通话"提供给您正在使用的图书馆的人,并说服他们以某种方式让他们的图书馆为您服务。

答案 1 :(得分:2)

您可以对Properties执行相同操作:

 Properties p = new Properties();
 p.load(new FileInputStream("user.props"));
 System.out.println("user = " + p.getProperty("DBuser"));
 System.out.println("password = " + p.getProperty("DBpassword"));
 System.out.println("location = " + p.getProperty("DBlocation"));

.ini文件位于:

# this a comment
! this a comment too
DBuser=anonymous
DBpassword=&8djsx
DBlocation=bigone

答案 2 :(得分:1)

您是否尝试过使用“属性”?

创建配置:

属性prop = new Properties();     OutputStream output = null;

try {
        SaveSucessful = true;
    output = new FileOutputStream("config.jar");

    // set the properties value
    prop.setProperty("PVIDNO", "PALMUS-00001");

    // save properties to project root folder
    prop.store(output, null);

} catch (IOException io) {
    io.printStackTrace();
} finally {
    if (output != null) {
        try {
            output.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    }

阅读配置:

Properties prop = new Properties();
    InputStream input = null;

    try {
            LoadSucessful = true;
        input = new FileInputStream("config.jar");

        // load a properties file
        prop.load(input);

        // get the property value and print it out
        PlayerName = prop.getProperty("PVIDNO");

    } catch (IOException ex) {
        ex.printStackTrace();
    } finally {
        if (input != null) {
            try {
                input.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

这应该完美无缺。