【问题标题】:How to read a file from maven resources folder in GCP Cloud Function?如何从 GCP Cloud Function 中的 Maven 资源文件夹中读取文件?
【发布时间】:2021-01-07 12:12:38
【问题描述】:

我的项目使用具有默认文件夹结构的 Maven,当我的 Google Cloud Function 尝试从资源目录 (src/main/resources) 读取 JSON 文件时,失败并显示:

找不到文件异常

下面是我的代码,它是从类路径资源文件夹中读取的标准代码。

任何提示可能是什么问题?

ClassLoader classLoader = getClass().getClassLoader();
URL resource = classLoader.getResource("gcs-sf-dump.sql");
if (resource == null) {
    throw new IllegalArgumentException("file is not found!");
} else {
    File myFile =  new File(resource.getFile());
    String query = FileUtils.readFileToString(myFile);
}

【问题讨论】:

  • 您是否尝试将文件命名为classpath:gcs-sf-dump.sql"
  • 不,它只是我资源文件夹中的 gcs-sf-dump.sql

标签: java maven google-cloud-platform google-cloud-functions filereader


【解决方案1】:

我在我的 GCP 云函数中使用 FileReaderBufferedReader

try (FileReader fileReader = new FileReader("src/main/resources/myFile.sql"); 
 BufferedReader bufferedReader = new BufferedReader(fileReader)) {
   String fileContent = bufferedReader.lines()
                                   .collect(Collectors.joining(System.lineSeparator()));
}

使用来自 Apache Commons 的 IOUtils (org.apache.commons.io.IOUtils):

String fileContent = IOUtils.toString(getClass().getClassLoader()
       .getResourceAsStream("src/main/resources/myFile.sql"), StandardCharsets.UTF_8);

我用getResourceAsStream 尝试了一些测试,但没有成功!


参考:

【讨论】:

  • 似乎我们必须明确给出路径“src/main/resources/myFile.sql”并通过 getResourceAsStream 读取它不起作用。可能是 Cloud Functions 的限制。谢谢。
  • @VinodJayachandran,看起来确实是个限制。我很高兴能帮助你。感谢您的反馈!
【解决方案2】:

对我来说这是可行的:

 java.io.File filePath = new java.io.File("src/main/resources/file.sql");

【讨论】:

    猜你喜欢
    • 2019-10-16
    • 2018-04-05
    • 1970-01-01
    • 1970-01-01
    • 2018-11-02
    • 2017-05-18
    • 2018-11-12
    • 1970-01-01
    相关资源
    最近更新 更多