在war包中static中的静态文件,打成jar包后却读取不到,这是为什么呢,让我门看下两种读取的区别

一。war包中都取静态模板文件

  1. public static void download(String filename, HttpServletResponse res) throws IOException {
  2. // 发送给客户端的数据
  3. OutputStream outputStream = res.getOutputStream();
  4. byte[] buff = new byte[1024];
  5. BufferedInputStream bis = null;
    // 获取全路径
  6. String path = Thread.currentThread().getContextClassLoader().getResource("").getPath()+"templateFile";
  7. String filePath ="";
  8. if(ExcelUtil.isOSLinux()) {
  9. filePath = path +"/"+filename;
  10. }else {
  11. filePath = path +"\\"+filename;
  12. }
  13. // 读取filename
  14. bis = new BufferedInputStream(new FileInputStream(new File(filePath)));
  15. int i = bis.read(buff);
  16. while (i != -1) {
  17. outputStream.write(buff, 0, buff.length);
  18. outputStream.flush();
  19. i = bis.read(buff);
  20. }
  21.  
  22. bis.close();
  23. outputStream.close();
  24. }

问题来了,上图的获取方式中有一个共同点:都是根据文件地址来获取文件对象。该文件地址都是编译之后的文件目录,在war包中可以根据该地址获取文件,但是,当打包成JAR包时,无法通过该地址查找到文件对象,那么在JAR包中,如何读取静态文件呢?

二。jar包获取静态模板文件

公共类:

  1. public static boolean isOSLinux() {
  2. Properties prop = System.getProperties();
  3.  
  4. String os = prop.getProperty("os.name");
  5. if (os != null && os.toLowerCase().indexOf("linux") > -1) {
  6. return true;
  7. } else {
  8. return false;
  9. }
  10. }
  11.  
  12. /**
  13. * 根据文件名获取文件路径
  14. * @param filename
  15. * @throws IOException
  16. */
  17. public static String getXSSFWorkbookByFilename(String filename) throws IOException {
  18. String filePath ="";
  19. if(ExcelUtil.isOSLinux()) {
  20. filePath = "templateFile/"+filename;
  21. }else {
  22. filePath = "templateFile\\"+filename;
  23. }
  24. return filePath;
  25. }

采用流的方式读取文件:

  1. public void exportQuesAssessorWriteRs(TsQuesAssessor tqa, OutputStream os) throws Exception {
  2. // 查询导出数据
  3. List<OpinionAboutValue> datas = tsQuesAssessorMapper.getQuesAssessorWriteList(tqa);
  4. OpinionAboutValueTemplate quesLimit = opinionAboutValueGradeMapper.getQuesLimit(tqa);
  5. // 采用流的方式读取模板文件
  6. String path = FileUtil.getXSSFWorkbookByFilename(tempLateFilename);
  7. InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream(path);
  8. //读取excel模板
  9. XSSFWorkbook xssfWorkbook = new XSSFWorkbook(inputStream);
  10. Sheet sheet = xssfWorkbook.getSheetAt(0);
  11. Cell cell = sheet.getRow(1).getCell(1);
  12. cell.setCellValue(builder.toString());
  13. createExceportDatas(sheet, datas);
  14. xssfWorkbook.write(os);
  15. }

关于jar包和war读取静态文件的更多相关文章

  1. 从JAR包中如何读取数据文件

    还不是很懂.....待总结......

  2. 怎样将文件夹打包为jar包或war包

    在dos命令中,找到要打包文件夹位置,输入jar -cvf 打包后的名和格式 文件夹名 如图: 在我的文件夹的位置就能看到jar包和war包了

  3. SpringBoot系列——jar包与war包的部署

    前言 Spring Boot支持传统部署和更现代的部署形式.jar跟war都支持,这里参考springboot参考手册学习记录 两种方式 jar springboot项目支持创建可执行Jar,参考手册 ...

  4. jar包和war包的区别(转)

    jar包和war包的区别:war是一个web模块,其中需要包括WEB-INF,是可以直接运行的WEB模块.而jar一般只是包括一些class文件,在声明了Main_class之后是可以用java命令运 ...

  5. jar包和war包的区别

    jar包和war包的区别: jar包就是别人已经写好的一些类,然后将这些类进行打包,你可以将这些jar包引入你的项目中,然后就可以直接使用这些jar包中的类和属性了,这些jar包一般都会放在lib目录 ...

  6. java之jvm学习笔记六-十二(实践写自己的安全管理器)(jar包的代码认证和签名) (实践对jar包的代码签名) (策略文件)(策略和保护域) (访问控制器) (访问控制器的栈校验机制) (jvm基本结构)

    java之jvm学习笔记六(实践写自己的安全管理器) 安全管理器SecurityManager里设计的内容实在是非常的庞大,它的核心方法就是checkPerssiom这个方法里又调用 AccessCo ...

  7. jar包和war包

    Jar (Java archive), 是将实现了某功能的所有类及辅助资源用ZIP压缩形式打包而成的一个文件, 便于代码的管理和重复使用.当使用别人提供的jar时,只需要在classpath环境变量中 ...

  8. jar包和war包的介绍与区别

    在学习maven的过程中接触到了jar包和war包.之前在写小项目的时候真的遇到过war包,当时为了找到jar包,把war包 的后缀名改成了.rar的压缩文件,在里面提取出来jar包来用.其实jar包 ...

  9. spring boot + jersey工程由jar包转为war包在tomcat中启动报错问题

    第一步: 在maven下,将Spring Boot工程由jar转换为war包启动,很简单,将pom.xml文件中的packaging改为war <packaging>war</pac ...

随机推荐

  1. Kafka从入门到放弃(三) —— 详说生产者

    上一篇对Kafka做了简单介绍,还没看的朋友可以点击下方链接. Kafka从入门到放弃(一) -- 初识别Kafka 消息中间件必须与生产者和消费者一起存在才有意义,这次先来聊聊Kafka的生产者. ...

  2. springboot学习(一)

    最近想学习springboot所以在网上找了很多文章参考怎么构建springboot项目以及集成mybatis 集成mybatis的部分参考了这两篇文章 https://blog.csdn.net/t ...

  3. AtCoder Beginner Contest 184 题解

    AtCoder Beginner Contest 184 题解 目录 AtCoder Beginner Contest 184 题解 A - Determinant B - Quizzes C - S ...

  4. Spring5 AOP编程:关于org.springframework.beans.factory.BeanNotOfRequiredTypeException报错

    Spring5 AOP编程:关于org.springframework.beans.factory.BeanNotOfRequiredTypeException报错 先上错误详细信息: org.spr ...

  5. CF415A Mashmokh and Lights 题解

    Content 有 \(n\) 个灯,一开始都是亮着的. 有 \(m\) 次操作,每次操作按下开关 \(x\),按下之后所有编号 \(\geqslant x\) 的灯全部熄灭.问你所有的灯第一次被熄灭 ...

  6. LuoguP7870 「Wdoi-4」兔已着陆 题解

    Content 对一个栈执行如下操作: 1 l r:依次向栈里面弹入 \(l,l+1,\dots,r-1,r\). 2 k:依次从栈里面弹出 \(k\) 个数,并求出所有弹出的数的和. 数据范围:\( ...

  7. CF1547B Alphabetical Strings 题解

    Content 我们有一个空的字符串,第 \(i\) 次操作我们可以将字母表中第 \(i\) 个字母加入字符串的最前面或最后面.我们称一个长度为 \(n\) 的字符串是合法的,当且仅当这个字符串可以通 ...

  8. java 多线程 集合的包装方法Collections.synchronizedXXXXX;线程安全的集合类:Java.util.concurrent.ConcurrentXXX;java.util.concurrent.CopyOnWriteXXXX

    问题:ArrayList  等线程不安全 当多线程并发修改一个集合数据时,可能同一个下标位置被覆盖. 示例代码: 一个List,我们创建10个线程,每个线程往这个List中添加1000条数据,结果往往 ...

  9. 【剑指Offer】扑克牌顺子 解题报告(Python)

    [剑指Offer]扑克牌顺子 解题报告(Python) 标签(空格分隔): 剑指Offer 题目地址:https://www.nowcoder.com/ta/coding-interviews 题目描 ...

  10. 深度探索 OpenStack Neutron:BGP(1) 【转载】

    3.4 BGP 原文地址:http://mp.weixin.qq.com/s?src=3&timestamp=1500043305&ver=1&signature=XwiIVV ...