java 如何获取resources下的文件

首先我们来看一下文件的结构
在这里插入图片描述
当我们想要获取mysql.propertiesoracle.propertiesbayonetConfig.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的时候,就会提示我找不到文件。
我在查阅了相关的博客后,得知了一些原因。

  1. 当我在IDEA里面进行调试的时候,文件是真实存在于磁盘的某个路径的,所以能正常的进行读取
  2. 而打成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();

完美

猜你喜欢

转载自blog.csdn.net/qq_41967899/article/details/88974583