【问题标题】:Unable to read CSV file when uploading to Google Cloud Platform上传到 Google Cloud Platform 时无法读取 CSV 文件
【发布时间】:2020-02-12 14:15:56
【问题描述】:

我的 Spring Boot Application 结构是这样的 Spring boot app structure

csvService.java 类中,我正在尝试读取test.csv 文件。我可以在 localhost 上读取它,但是当我将它部署到 Google Cloud Platform 时,它无法读取给出 FileNotFoundException 的文件。

这是负责读取 csv 文件的代码行:

CSVReader reader = new CSVReader(new InputStreamReader(newFileInputStream("test.csv"), "UTF8"));

【问题讨论】:

  • 有人可以帮忙
  • 运行ls时是否看到列出的test.csv?
  • 是的,当我在本地机器上运行 ls 时,我可以看到 csv 文件
  • 当然你会在你的本地机器上看到它——文件没有传播到你的分发方式中。如果你正在制作一个 jar 文件,它不会被打包在里面。如果你想要它,你必须让它成为一种资源。否则即时访问它,例如从 Google Cloud Storage。
  • 把它放在资源文件夹中并尝试了这个 CSVReader reader = new CSVReader(new InputStreamReader(newFileInputStream("src/main/resources/config/test.csv"), "UTF8"));

标签: spring-boot csv google-cloud-platform filenotfoundexception


【解决方案1】:

文件结构与您部署它的位置不同,test.csv 文件可能没有打包到您的二进制文件中。因此,您会收到 FileNotFoundException - 该文件根本不在您本地计算机上的位置。

为您的项目指定/澄清的事项:

  1. 您在哪里以及如何部署?是 GKEGCE 还是 AppEngine?在您部署 jar 文件时,查找它们的每一个行为方式
  2. 为什么要在生产环境中部署test.csv 文件?当然,您想动态获取该 csv 文件,而不是静态获取(除非它具有特定含义) - 如果您这样做,请将其放入 resources 文件夹并这样对待它。您需要稍微修改文件读取代码。

【讨论】:

  • 我在资源文件夹中添加了 csv 文件并尝试像这样读取它 CSVReader reader = new CSVReader(new InputStreamReader(newFileInputStream("src/main/resources/config/test.csv"), "UTF8"));
  • 这是正确的方法还是必须给出其他路径
  • 它的 Google Kubernetes 引擎
  • 不,你不能使用绝对路径。请改用this example
【解决方案2】:

实际上问题出在 Docker 文件中。图像正在创建,并且 wsa 仅使用 jar。我需要在 Docker 文件中添加以下行。 复制 --from=builder /app/test.csv /test.csv

【讨论】:

    猜你喜欢
    • 2020-09-09
    • 1970-01-01
    • 1970-01-01
    • 2019-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-13
    • 2022-01-04
    相关资源
    最近更新 更多