关于ini4j 写入ini文件编码问题

最近在做一个关于适配老项中ini配置文件的小程序。
因为之前的桌面程序的ini文件的编码采用的GB2312的编码,然后我又图快就使用了ini4j 的工具。
当我按照官网的demo对相应的配置文件进行操作时,发现ini4j貌似没有设置编码的方法,自动生成的编码是UTF-8的。
这就很难受了,如果要换工具的话大部分解析的代码又要重写。没办法只能找ini4j 的API 看里面有没有相应设置编码的方法。
找了半天没找到没办法只好将ini4j 的jar包反编译,自己来看源码了。

果然被我找到了  Wini 中有个这个构造方法。
 

public Wini(Reader input) throws IOException, InvalidFileFormatException
  {
    this();
    load(input);
  }

果断运用到项目中去。

InputStreamReader isr = new InputStreamReader(new FileInputStream(fileName+"/Film.ini"), "GB2312");
        	BufferedReader reader = new BufferedReader(isr);
        	Wini ini = new Wini(reader);

然后运行。哈哈哈 可以读到别的编码的ini 文件了 。

但是当我运营到写ini文件时突然运行报错了。

java.io.FileNotFoundException
	at org.ini4j.Ini.store(Ini.java:126)
	at com.iptv.tools.ToolIni.addFilm(ToolIni.java:722)
	at com.iptv.tools.ToolIni.main(ToolIni.java:938)

莫名奇妙找不打文件了。查看源码store()方法

public void store() throws IOException
  {
    if (this._file == null)
    {
      throw new FileNotFoundException();
    }

    store(this._file);
  }

原来是this._file为空了。返回去看源码才发现。

public Wini(File input) throws IOException, InvalidFileFormatException
  {
    this();
    setFile(input);
    load();
  }

public Wini(Reader input) throws IOException, InvalidFileFormatException
  {
    this();
    load(input);
  }

对比两个方法才发现一个没有对_file 赋值。
对比构造方法设置编码的方法在wini 的父类ini 类中找到了

public void store(OutputStream output) throws IOException
  {
    store(new OutputStreamWriter(output, getConfig().getFileEncoding()));
  }

这样就能设置写入编码了。实验一波OK

OutputStreamWriter oStreamWriter = new OutputStreamWriter(new FileOutputStream(new File(fileName+"/Film.ini")), "GB2312");
        ini.store(oStreamWriter);

做一个小记录把,以后方便自己查看。
 

猜你喜欢

转载自blog.csdn.net/cp1153750171/article/details/81432939
INI