jar包程序在Linux环境中读取静态资源

摘要:

部署问题

本次博客主要记录自己网站部署道Linux服务器之后,

读取resources包下的敏感词汇(静态资源)问题。

1、jar包与war包的区别

首先说一下两者的定义:

jar包:它是平台没有关系的文件格式,并且允许将许多个文件组合成一个压缩文件。简单来说,jar包就是将别人已经写好的类(.clss文件)进行打包。

war包:它是一个可以直接运行的JavaWeb模块,它只要部署道服务器容器中启动服务器就能解压运行。war包中就是自己写的java类.

注意:上面分析可以看出war包中包含了resources目录中的静态文件,jar则没有打包resources目录中的静态文件.

所以不难看出,当我们部署jar包项目的时候需要将yml或者properties配置文件放到服务器中,但是war包就不需要.

以上jar包不进行对resources中的静态文件进行打包是默认方式,我们可以进行配置来实现将静态文件打包到jar包中.

2、读取敏感词汇问题。

在项目没有部署道Linux服务器中的时候我们启动项目使用以下方式进行文件的读取是可以的

File file = new File("/static/txttemplate/maren.txt");
FileReader fileReader = new FileReader(file);
BufferedReader bufferedReader = new BufferedReader(fileReader);
bufferedReader.readLine();

但是这种读取方式在我们部署带Linux服务器中之后,就会失效。会抛出FileNotFindException异常。

这就是因为我们部署到服务器中,这种传统的方式就不能进行进行读取了。

3、解决方案

想要解决这种问题其实很简单,我们只需要进行相关配置,将静态文件打包到我们的jar包中,并使用正确的读取方式就可以敏感词汇中的内容读取出来。

(1)首先在pom文件中导入相关坐标和插件,保证不进行替换静态文件的属性,将讲台资源打包进入jar包中。

<!--配置打包成jar包之后读取文件-->
<resources>
    <resource>
        <directory>src/main/java</directory>
        <includes>
            <include>**/*.properties</include>
            <include>**/*.xml</include>
            <include>**/*.yml</include>
        </includes>
        <!--不替换资源中的属性-->
        <filtering>false</filtering>
    </resource>
    <resource>
        <directory>src/main/resources</directory>
        <includes>
            <include>**/*.*</include>
        </includes>
        <!--不替换资源中的属性-->
        <filtering>false</filtering>
    </resource>
</resources>

(2)其次修改读取静态资源的方式

ClassPathResource classPathResource = new ClassPathResource("/static/txttemplate/maren.txt");
List<String> list = FileUtil.readFile2List(classPathResource.getInputStream());

使用ClassPathResource进行静态文件的读取,因为这个类的对象是用于获取class字节码文件路径的文件,其中FileUtil.readFile2List(),此方法是封装的工具类.工具类代码如下:(将stream流中的内容读取添加到List集合中)

public class FileUtil {
    public static List<String> readFile2List(InputStream inputStream) throws Exception {
        List<String> list = new ArrayList<>();
        try {
            InputStreamReader reader = new InputStreamReader(inputStream, "UTF-8");
            BufferedReader bufReader = new BufferedReader(reader);
            String strLine = null;
            while ((strLine = bufReader.readLine()) != null) {
                list.add(strLine);
            }
            bufReader.close();
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        return list;
    }
}

4、总结

本次主要记录的是在部署中遇到的静态文件读取问题:

首先我们需要了解war包和jar包的区别所在,

其次再部署jar包项目的时候需要在pom文件中配置,

然后需要使用ClassPathResource类的对象进行文件的读取,并获取出InputStream流

最后使用工具类按行读取.

Logo

更多推荐