无法读取 jar 文件中的文件

2023-12-06

我使用 spring-boot 开发了一个应用程序,我需要读取包含电子邮件的 csv 文件。

这是我的做法的一个片段:

public Set<String> readFile() {
        Set<String> setOfEmails = new HashSet<String>();

        try {
            ClassPathResource cl = new ClassPathResource("myFile.csv");
            File file = cl.getFile();
            Stream<String> stream = Files.lines(Paths.get(file.getPath()));
            setOfEmails = stream.collect(Collectors.toSet());

        } catch (IOException e) {
            logger.error("file error " + e.getMessage());
        }
        return setOfEmails;
    } 

当我使用 eclipse 执行应用程序时它有效: run As --> spring-boot app

但是当我将 jar 放入容器 docker 中时,方法 readFile() 返回一个空集。

我使用 gradle 来构建应用程序

你有什么想法吗?


The javadocs for ClassPathResource state:

支持分辨率为java.io.File如果类路径资源驻留在文件系统中,但不适用于 JAR 中的资源。始终支持 URL 解析。

因此,当资源(CSV 文件)位于 JAR 文件中时,getFile()将会失败。

解决方案是使用getURL()相反,然后将 URL 作为输入流打开,等等。像这样的东西:

public Set<String> readFile() {
    Set<String> setOfEmails = new HashSet<String>();

    ClassPathResource cl = new ClassPathResource("myFile.csv");
    URL url = cl.getURL();
    try (BufferedReader br = new BufferedReader(
                             new InputStreamReader(url.openStream()))) {

        Stream<String> stream = br.lines();
        setOfEmails = stream.collect(Collectors.toSet());
    } catch (IOException e) {
        logger.error("file error " + e.getMessage());
    }
    return setOfEmails;
} 

如果仍然失败,请检查您是否使用了正确的资源路径。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

无法读取 jar 文件中的文件 的相关文章

  • 正则表达式拆分数字和字母组,不带空格

    如果我有一个像 11E12C108N 这样的字符串 它是字母组和数字组的串联 如何在中间没有分隔符空格字符的情况下分割它们 例如 我希望分割结果为 tokens 0 11 tokens 1 E tokens 2 12 tokens 3 C
  • Android在排序列表时忽略大小写

    我有一个名为路径的列表 我目前正在使用以下代码对字符串进行排序 java util Collections sort path 这工作正常 它对我的 列表进行排序 但是它以不同的方式处理第一个字母的情况 即它用大写字母对列表进行排序 然后用
  • 如何使用 Java 处理 Selenium WebDriver 中的新窗口?

    这是我的代码 driver findElement By id ImageButton5 click Thread sleep 3000 String winHandleBefore driver getWindowHandle drive
  • java中如何连接字符串

    这是我的字符串连接代码 StringSecret java public class StringSecret public static void main String args String s new String abc s co
  • wait() 在游戏中如何工作?

    在 playframework 的文档中here http www playframework org documentation 1 2 1 asynchronous已写 public static void loopWithoutBlo
  • 如何在不超过最大值的情况下增加变量?

    我正在为学校开发一个简单的视频游戏程序 我创建了一个方法 如果调用该方法 玩家将获得 15 点生命值 我必须将生命值保持在最大值 100 并且由于我目前的编程能力有限 我正在做这样的事情 public void getHealed if h
  • Cassandra java驱动程序协议版本和连接限制不匹配

    我使用的java驱动程序版本 2 1 4卡桑德拉版本 dsc cassandra 2 1 10cql 的输出给出以下内容 cqlsh 5 0 1 Cassandra 2 1 10 CQL spec 3 2 1 Native protocol
  • 经常提交 docker 容器是一个好习惯吗?

    我在里面使用WebSphere Liberty 由于 WebSphere Liberty 需要频繁的 xml 编辑 这对于 Dockerfile 命令来说是不可能的 我必须不时地对容器进行 docker commit 以便其他人可以使用我的
  • hibernate锁等待超时超时;

    我正在使用 Hibernate 尝试模拟对数据库中同一行的 2 个并发更新 编辑 我将 em1 getTransaction commit 移至 em1 flush 之后我没有收到任何 StaleObjectException 两个事务已成
  • 在 Netbeans 8 上配置 JBoss EAP 的问题

    我已经下载了 JBoss EAP 7 并正在 Netbeans 8 上配置它 我已经到达向导 实例属性 其中要求从选择框中选择 域 当我打开选择框时 它是空的 没有什么可以选择的 因此 完成 按钮也处于非活动状态 这使得无法完成配置 我通过
  • Jersey 客户端请求中未设置 Content-Length-Header

    我正在使用 Jersey Client 访问网络服务 如下所示 response r accept MediaType TEXT PLAIN TYPE header content length 0 post String class 其中
  • Struts 2 + Sitemesh 3 集成 - FreemarkerDecoratorServlet 中的 NPE

    我将 Struts 2 版本 2 3 14 3 与 Sitemesh 3 版本 3 0 alpha 2 一起使用 并且在某些情况下遇到 NullPointerException 首先 这是我的 web xml 中的 struts2 site
  • 在 Spring 中重构这个的最佳方法?

    private final ExecutorService executorParsers Executors newFixedThreadPool 10 public void parse List
  • 如何在JSTL中调​​用java方法? [复制]

    这个问题在这里已经有答案了 这可能是重复的问题 我只想调用不是 getter 或 setter 方法的方法例如 xyz 类的 makeCall someObj stringvalue Java类 Class XYZ public Strin
  • 替换后增量

    我自己已经有一个问题了 但我想扩展它后增量示例 https stackoverflow com questions 51308967 post increment with example char a D int b 5 System o
  • Eclipse 中 Spring MVC 模型对象的 (jsp /jstl) 视图中的代码辅助

    在 Spring MVC 中 当将对象放置在视图模型中时 如下所示 public String getUser Model model fetch user model addAttribute user user return viewN
  • Trie 数据结构 - Java [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 是否有任何库或文档 链接提供了在 java 中实现 Trie 数据结构的更多信息 任何帮助都会很棒 Thanks 你可以阅读Java特里树
  • 如何从 Maven 存储库引用本机 DLL?

    如果 JAR 附带 Maven 存储库中的本机 DLL 我需要在 pom xml 中放入什么才能将该 DLL 放入打包中 更具体地举个例子Jacob http search maven org artifactdetails 7Cnet s
  • 调整添加的绘制组件的大小和奇怪的摆动行为

    这个问题困扰了我好几天 我正在制作一个特殊的绘画程序 我制作了一个 JPanel 并添加了使用 Paint 方法绘制的自定义 jComponent 问题是 每当我调整窗口大小时 所有添加的组件都会 消失 或者只是不绘制 因此我最终会得到一个
  • GUI Java 程序 - 绘图程序

    我一直试图找出我的代码有什么问题 这个想法是创建一个小的 Paint 程序并具有红色 绿色 蓝色和透明按钮 我拥有我能想到的让它工作的一切 但无法弄清楚代码有什么问题 该程序打开 然后立即关闭 import java awt import

随机推荐

  • 如何在客户端仍处于连接状态时更新 DataSnap 服务器?

    我们使用有状态的 DataSnap 服务器来执行某些业务逻辑任务 并提供客户端数据集数据 如果我们必须更新服务器来修改业务规则 我们将新版本复制到新的空文件夹中并注册它 取决于 Delphi 版本 只需启动或运行 TRegSvr 实用程序
  • 警告:函数的隐式声明

    我正在用 C 编程 我的 gcc 编译器在我的函数调用中给出以下警告mySedondFile c implicit declaration of function func 函数原型声明于myfile h as void func char
  • 使用 sysctl() 获取 osx 上的 cpu 信息

    我正在 osx 上工作 我想获得一些有关我的 cpu 的信息 为此 我找到了终端命令 sysctl a 但我需要在程序中获取这些信息 因此我需要使用函数 systcl 我试图阅读该男子 但我仍然不知道如何获取一个字符串 例如我的CPU的名称
  • Java非阻塞IO选择器导致通道寄存器阻塞

    我有两个线程正在处理非阻塞套接字的 Java NIO 这就是线程正在做的事情 主题 1 调用选择器的 select 方法的循环 如果有可用的密钥 则会对它们进行相应的处理 话题2 偶尔会通过调用 register 将 SocketChann
  • 如何使用 malloc 定义二维数组并将其传递给函数

    我想将使用 malloc 定义的二维数组传递给函数 首先我使用代码定义数组博客文章 int Make2DIntArray int arraySizeX int arraySizeY int theArray theArray int mal
  • sublime 有没有办法在每次击键时自动保存?

    我希望 sublime 在每次击键时保存我的文件 以便实时重新加载 最巧妙的操作是在每次击键时自动保存 前提是文件具有有效的语法 如果指南针任务足够快 就像直接在 chrome 检查器中工作一样 您可以编写一个插件来使用以下命令保存文件on
  • 具有不同代码库的 Mercurial 分支[关闭]

    Closed 这个问题需要多问focused 目前不接受答案 我正在努力寻找一种使用 Mercurial 处理工作流程的好方法 我在 SO 和其他地方阅读了许多相关问题 但找不到合理的解决方案 假设我有两个分支 我在其中进行正常开发的默认分
  • 如何使用 iPhone SDK 清除圆角矩形之外的角?

    我正在尝试实现自定义视图 此视图应显示由灰色圆形矩形边框包围的图像 我可以让图像以及边框显示良好 但是 由于边框有圆角 我需要一种方法来清除这些角 以便它们正确显示视图后面的任何内容 我怎样才能做到这一点 看来我可以使用CGContextC
  • Spring MVC 是否支持无扩展 URL?

    Spring MVC 是否像 asp net MVC 一样支持无扩展 URL 我刚刚开始使用 Spring MVC 或者也许与 Spring MVC 无关 但与 Tomcat 无关 是的 它确实 如果您使用注释 则可以使用以下内容注释控制器
  • Rails file_field 不上传任何内容

    我正在使用 Rails 4 和 Ruby 2 以及 Carrier Wave 以及 jQuery Mobile 1 3 并且用户拥有一个带有徽标的个人资料 我已经在控制台中测试了后端 Carrier Wave 的内容 它可以工作 问题出在表
  • Angularjs:没有 templateURL 的路由和控制器?

    是否可以在没有 templateURL 的情况下使用 Angularjs 的路由和控制器 例如 下面是我当前的路线 控制器和模板网址 return app config routeProvider function routeProvide
  • BackboneJS 使 ID 为整数

    我正在使用 JSON stringify 和 JSON parse 根据对在线数据库的更改来编辑我的 JSON 文件 一切正常 除了在数字周围加上引号 这会搞乱 JSON 文件 例如应该是 id 1但它正在打印出来 id 1 我该如何编辑引
  • 即使禁用 IIS 压缩,为什么 ScriptResource.axd 仍会被压缩?

    我在 IIS 6 0 上运行 ASP NET 应用程序 通常我会为动态和静态文件启用压缩 但是 我暂时关闭了压缩 但 ScriptResource axd 仍然以压缩形式发送 这并不像是配置错误 因为 WebResource axd 未压缩
  • 这个replaceAt函数是如何工作的?

    您能解释一下这段代码是如何工作的吗 String prototype replaceAt function index character return this substr 0 index character this substr i
  • Postgres:为什么使用偏移/限制的子选择性能如此糟糕

    您能帮我理解这些语句之间性能下降的原因吗 对我来说 似乎在 D E 的情况下 他首先将地址加入到所有订阅者中 最后应用偏移和限制 他到底为什么要这么做 我是否遗漏了有关子选择和偏移如何协同工作的信息 他不应该首先找到正确的偏移量 然后开始执
  • jQuery Live 可以在 Safari 上运行吗?

    我刚刚问过这个问题一小时前但对于 IE8 我被告知 JQuery Live 处理程序不支持 更改 所以我切换到 单击 这解决了我的问题 现在我发现 Safari 由于某些奇怪的原因无法使用单击 有人知道吗为什么 所以我在想我可以两者兼得吗
  • gdb:没有可用的瓶子-gdb 安装

    我尝试在我的 M1 Mac OS 11 5 2 上安装 gdb 命令 但出现了 brew 错误 gdb 没有可用的瓶子 I use brew install gdb 这是输出 Error gdb no bottle available Yo
  • 我怎样才能给eclipse更多的内存超过512M?

    我有以下设置 但是当我输入 1024 并将所有 512 替换为 1024 时 Eclipse 根本不会启动 我的 eclipse JVM 如何拥有超过 512M 的内存 startup plugins org eclipse equinox
  • 如何开发“旋转瓶子”应用程序

    我正在制作一个旋转瓶子游戏 我不知道如何通过滑动手指的速度来控制瓶子的旋转速度 我希望它像命运之轮一样工作 你刷得越快 它转得越快 我开始开发UIRotationGestureRecognizer 但我真的不认为这是最好的方法 嘿检查这个演
  • 无法读取 jar 文件中的文件

    我使用 spring boot 开发了一个应用程序 我需要读取包含电子邮件的 csv 文件 这是我的做法的一个片段 public Set