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

时间:2018-04-16 10:41:30

标签: spring file spring-boot path

我的文件层次结构:

>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");

EDIT2

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

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

4 个答案:

答案 0 :(得分:1)

尝试这样的事情:

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等注释的类)

答案 1 :(得分:1)

InputStream is = new ClassPathResource("/someFile.txt").getInputStream();

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

documentation for ClassPathResource中所述:

  

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

换句话说,您希望对您的案例使用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()方法。

有关详细信息,请参阅reference

答案 2 :(得分:0)

您可以尝试从ressources加载文件:

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

答案 3 :(得分:0)

我认为你应该给File对象提供准确的位置。另一种解决方案:

for root, dirs, files in os.walk(search_folder):
    if file_name in files:
        print (os.path.join(root, file_name))
        print ('deleting the file......!!')
        os.remove(os.path.join(root,file_name))

希望它有所帮助。