我的文件层次结构:
>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();
答案 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))
希望它有所帮助。