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