Spring 无法通过指定的路径找到该文件



我的文件层次结构:

>resources:
    >static:
        >css:
        >json:
            >networks:
                >network-list.json
        >js:
        >img:

我尝试通过以下方式创建一个新文件:

File jsonNetworkDetailsFile = new File("/json/networks/network-list.json");
File jsonNetworkDetailsFile = new File("static/json/networks/network-list.json");
File jsonNetworkDetailsFile = new File("../json/networks/network-list.json");
File jsonNetworkDetailsFile = new File("../../json/networks/network-list.json");
File jsonNetworkDetailsFile = new File("/json/networks/network-list.json");

。等等。这些都不起作用。

我仍然得到

java.io.FileNotFoundException: the system cannot find the path specified

正确的方法是什么?

编辑

找到了解决方案。必须包含文件的完整路径,例如:

 File jsonNetworkDetailsFile = new File("src/main/resources/static/json/networks/Turtlecoin/turtlecoin-pools.json");

编辑2

正如 TwiN 所说 - 一旦应用程序打包到.jar中,就不可能通过File对象引用文件。适当的解决方案包括:

InputStream jsonNetworkDetailsFile = new ClassPathResource("/static/json/networks/network-list.json").getInputStream();
InputStream is = new ClassPathResource("/someFile.txt").getInputStream();

/someFile.txt位于资源文件夹中的位置。

如 ClassPathResource 文档中所述:

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

换句话说,您需要对案例使用 getInputStream() 方法:

InputStream is = new ClassPathResource("/someFile.txt").getInputStream();
try {
    String contents = new String(FileCopyUtils.copyToByteArray(is), StandardCharsets.UTF_8);
    System.out.println(contents); // do something with the content here
    is.close();
} catch (IOException e) {
    e.printStackTrace();
}

我之所以提到这一点,是因为ClassPathResource也有getFile()方法。

有关更多详细信息,请参阅参考

尝试这样的事情:

ClassLoader classLoader = getClass().getClassLoader();
File file = new File(classLoader.getResource("classpath:static/json/networks/network-list.json").getFile());

您也可以使用 :

@Value(value = "static/json/networks/network-list.json")
private Resource myFile;

然后:

myFile.getInputStream()

(仅适用于标有@Component、@Service的类...etc(

你可以试试这个从资源加载文件:

ClassLoader loader = Thread.currentThread().
getContextClassLoader();
InputStream configStream = loader.getResourceAsStream("/static/json/networks/network-list.json");
我认为

您应该为 File 对象提供确切的位置。另一种解决方案:

File currDir = new File(".");
String path = currDir.getAbsolutePath();
// String path = "C:\ExternalFiles\"; // Or you can give staticly
File jsonNetworkDetailsFile = new File(path);

希望对您有所帮助。

相关内容

  • 没有找到相关文章

最新更新