【发布时间】:2018-12-11 01:54:48
【问题描述】:
在将此标记为重复之前,请阅读!我已经在 SO 和其他存储库中搜索了此解决方案。
如果 filepath 是绝对路径 file://some/path 或者如果它是 Classpath /some/class/path 中的路径,则以下 Spring API 有效。但是,此 API 无法处理包含“../”的相对路径。
File f = new DefaultResourceLoader().getResource(filepath).getfile();
如果上述失败,我一直在通过回退到下面来解决这个问题 -
File f = new File(filepath)
有没有办法避免这种回退逻辑并使用与文件路径无关的文件 API?
我遇到的另一个解决方案建议使用 getClass().getResource() 也需要后备 API 来处理绝对/相对路径。
【问题讨论】:
-
当类路径无法处理相对路径时,您能给出一个完整的示例类路径吗?
-
您是在谈论将资源从 sibling 路径加载到类路径上的路径吗?资源路径不是磁盘上位置的“真实”路径——资源只能从类路径条目下的路径加载。如果您想对磁盘上的任意位置执行 IO,则不能使用资源加载 API。相反,只需直接构造一个
File对象。 -
我感兴趣的相对路径不在类路径中。它与当前目录相关,但不是从当前目录访问子目录中的文件的典型示例,而是我试图从父目录访问文件(例如)。资源 API 适用于绝对路径,javadocs 并未声明它们不适用于相对路径。无论如何,如果没有其他解决方案,我会坚持我目前的方法。谢谢
-
我不太了解 Spring 如何确定事情,但在正常的 Java 用语中,“资源”是指相对于类路径条目命名的字节流。类加载空间是一种“虚拟文件系统”,它可以由磁盘上的真实文件、JAR 或 WAR 存档中的文件、甚至更深奥的东西(如从远程 URL 加载的 JAR 文件)支持。因此,处理资源的 API 并不是为处理加载“文件系统”的类之外的事情而设计的,我想这正是您遇到的限制。
标签: java