使用java.nio.file.Paths时如何避免基于平台的NoSuchFileException?

问题描述 投票:0回答:1

每当我在本地运行此代码时,文件的相对路径都工作正常,但预生产中的 Kubernetes pod 部署会抛出 NoSuchFileException。

MOCK_DATA_BASE_PATH = "/data/mocks"
private static String getMockDataString(String fileName) {
        try {
            String filePath = MOCK_DATA_BASE_PATH + fileName;
            return Files.lines(Paths.get(filePath))
                    .collect(Collectors.joining(System.lineSeparator()));
        } catch (IOException e) {
            logger.error("Unable to read file {} with reason {}", fileName, e.getMessage());
        }
        return null;
}

当我检查本地返回的内容时,

Path projectRoot = Paths.get("").toAbsolutePath();
它返回了本地计算机特定的绝对路径,如下所示:
/Users/username/path/to/project/mavenModule
,而 Kubernetes 部署清楚地显示
/
。鉴于两者的差异,我想知道如何在两个平台上毫无例外地读取文件。

项目目录是这样的:项目有3个mvn module1/module2/module2目录。文件位于

path/to/Project/data/mocks/

java file kubernetes nio relative-path
1个回答
0
投票

您可以将 MOCK_DATA_BASE_PATH 作为环境中的变量

或者放入资源目录,文件名将在资源中搜索

或类路径之类的链接:somedir/file.txt

© www.soinside.com 2019 - 2024. All rights reserved.