javaIO操作在打包后经常会报出文件找不到的错误:
java.io.FileNotFoundException: D:\package\bbb\history.xml (系统找不到指定的文件。)
那是因为Java程序打包后的程序目录结构会发生一定的变化,这会对文件读写操作产生直接影响,所以如果需要将一段程序打成jar包那就不能用简单的绝对或者相对路径进行文件操作。
解决方法:
需求只需要读文件
filePath = FilesUtils.class.getClassLoader().getResource("history.xml").getPath();
//判断文件是否存在
File file = new File(filePath);
System.out.println(file2.exists());
可根据需求进行调节getResource()会返回一个代表文件路径url对象,getPath()方法会返回需要读取文件的路径字符串,依靠这个方法就可以在jar包中动态的获取文件路径。
需求需要读写文件
由于压缩包中的文件只支持读操作,如果对文件进行写入会报错误,所以如果文件要支持读写需要另一种思路。
首先将需要读取的文件和jar包放在同一目录下:
通过如下代码获取路径
filePath = System.getProperty("user.dir").replace("\\", "/")+"/history.xml";
//判断文件是否存在
File file = new File(filePath);
System.out.println(file2.exists());
如果需要生成exe可执行文件,(不会生成可以参考这里)对于外部这个需要读写的文件,在exe4j生成过程中不用添加任何操作,在使用inno setup打成安装包(生成和打包过程链接中有)时需要在[Files]处加上一行:
Source: "D:\package\bbb\history.xml"; DestDir: "{app}"; Flags: ignoreversion
把D:\package\bbb\history.xml改为你的文件路径。以上就是打包后文件的读写方法。