java 如何获取resources下的文件
首先我们来看一下文件的结构
当我们想要获取mysql.properties、oracle.properties、bayonetConfig.txt文件里面内容的时候,我们一般会采用不同的方式,面对是properties,那么我所采用的是
ResourceBundle bundle = ResourceBundle.getBundle(resourceFile);
String driver = bundle.getString("driver");
String url = bundle.getString("url");
String username = bundle.getString("username");
String password = bundle.getString("password");
其中resourceFile只需要配置文件的前缀名称,也就是说,不需要properties这样的后缀名称。
对于TXT文件,我们一般需要一行一行读取
那么我所采用的的方法是
public final InputStream INPUTSTREAM = this.getClass().getClassLoader().getResourceAsStream("bayonetConfig.txt");
在需要的地方使用
这样就可以来实现文件的读取。
遇到的问题
在读取bayonetConfig.txt时候,使用
public final String BAYONET_PATH = this.getClass().getClassLoader().getResource("bayonetConfig.txt").getPath();
能获取文件的路径,但是一旦我打包成jar的时候,就会提示我找不到文件。
我在查阅了相关的博客后,得知了一些原因。
- 当我在IDEA里面进行调试的时候,文件是真实存在于磁盘的某个路径的,所以能正常的进行读取
- 而打成jar后,文件是存在于jar文件里面的资源文件,在磁盘是没有真实的路径的,所以无法通过
this.getClass().getClassLoader().getResource("bayonetConfig.txt").getPath();
来获取进行获取
正确的做法是通过流的方式来进行获取
及 就是使用
public final InputStream INPUTSTREAM = this.getClass().getClassLoader().getResourceAsStream("bayonetConfig.txt");
获取的流来进行读取文件的内容。
查阅的相关博客,十分感谢
还有一个可以待考证的
ClassPathResource resource = new ClassPathResource("export/aaa.txt");
InputStream inputStream = resource.getInputStream();
完美