java实现从jar包中获取资源文件并下载

一、实现方式:

  1. 首先从jar包中以流的方式获取资源文件
  2. 在系统中创建临时文件
  3. 将流写入临时文件
  4. 通过临时文件下载

二、将jar包中的资源文件以流的方式输出到系统的临时文件(不能以路径方式输出)

将jar包中的资源文件以流的方式输出

InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream("word" + separator + "DicTemplate.docx");

静态方法中使用:

ClassLoader.getSystemResourceAsStream()

以路径的方式输出,jar包中以路径方式输出时无法获取资源文件

String path = this.getClass().getClassLoader().getResource("DicTemplate.docx").getPath();

三、输出到系统的临时文件中

根据系统不同(Mac、Windows、Linux),临时文件创建的路径不同。

创建临时文件的方式:

1.使用File 类 createTempFile(String prefix, String suffix); 方法在系统默认临时目录来创建临时文件,参数 prefix 为前缀,suffix 为后缀:

public static void main(String[] args) throws Exception { 
        File temp = File.createTempFile("testrunoobtmp", ".txt"); 
        System.out.println("文件路径: "+temp.getAbsolutePath()); 
        temp.deleteOnExit(); 
        BufferedWriter out = new BufferedWriter(new FileWriter(temp)); 
        out.write("aString");
        System.out.println("临时文件已创建:"); 
        out.close(); 
    }

2. 使用Jodd中的FileUtil.createTempFile()

public void creatTempFile() throws IOException {
    File tempFile = FileUtil.createTempFile("DicTemplate", "docx", null);
    String path = tempFile.getAbsolutePath();
    System.out.println(path);
    tempFile.deleteOnExit();
}

四:注意:

  1. 不能直接以流的方式下载,即不能从jar包中获取流直接通过请求下载,原因待分析。
  2. 使用getResourceAsStream()和getResource()方法时注意是否需要在文件名之前添加分隔符:String separator = File.separator;
  3. 注意编码,包括Maven编码和资源文件编码
  4. 注意资源文件路径:本例使用”**/*.docx”,代表所有文件夹下面的docx后缀的文件。请根据自己的实际情况改写。
  5. 使用前请检查原有pom文件中是否已有该filter。
<resources>
<resource>
<directory>${basedir}/src/main/resources</directory>
<filtering>true</filtering>
<excludes>
<exclude>**/*.docx</exclude>
</excludes>
</resource>
<resource>
<directory>${basedir}/src/main/resources</directory>
<filtering>false</filtering>
<includes>
<include>**/*.docx</include>
</includes>
</resource>
</resources>

五:扩展:

在本地直接运行jar:java -jar stec-platform-dic-web.jar

六:参考

  1. java中jar包内的类访问jar包内部的资源文件的路径问题:http://blog.csdn.net/mm_bit/article/details/50372229
  2. 获取jar包内部的资源文件:http://blog.csdn.net/luo_jia_wen/article/details/50057191
  3. 【解惑】深入jar包:从jar包中读取资源文件:http://www.iteye.com/topic/483115
  4.  jar读取资源配置文件,jar包内包外,以及包内读取目录的方法:http://blog.csdn.net/T1DMzks/article/details/75099029
  5.  java加载jar包下的资源文件过程及原理分析:http://blog.csdn.net/puhaiyang/article/details/77409203

发表评论

电子邮件地址不会被公开。 必填项已用*标注