首页 > 解决方案 > 从windows中的相对路径获取文件

问题描述

我正在尝试从我的项目目录中访问 .doc 文件。在 Windows 中使用相对路径时出现错误。但是当我得到绝对路径时它工作正常。

File initialFile = new File("D:\\Demo\\src\\test\\java\\com\\pro\\mockfiles\\My-DOC-FILE.doc");
InputStream uploadStream = new FileInputStream(initialFile);

工作正常,但是,

File initialFile = new File("test/java/com/pro/mockfiles/My-DOC-FILE.doc");
InputStream uploadStream = new FileInputStream(initialFile);

给出以下错误

java.io.FileNotFoundException: test\java\com\pro\mockfiles\My-DOC-FILE.doc (The system cannot find the path specified)

我想用相对路径运行,你能帮忙吗?

标签: javainputstreamfileinputstream

解决方案


事件虽然相对路径可能在 Java 中有效,但我个人建议不要使用它们。平均原因是文件的“相对”路径会根据 Java 的工作目录而变化。如果您从 'c:\tmp' 启动应用程序,则相对路径将与从 'c:\test' 启动应用程序时不同。即使应用程序位于 'c:\myApp' 中。

但是,如果您想使用它,首先通过执行以下代码来确定您的应用程序是从哪里启动的(称为工作目录):

 System.out.println(Paths.get("").toAbsolutePath().toString());

在此之后根据工作目录和所需文件之间的差异更改您的相对路径。

作为旁注,我注意到该文件存储在类路径中。因此,您可能希望查看 ClassLoader 以访问文件而不是使用文件系统。您可以通过以下代码执行此操作(如果代码在测试中执行):

MyClass.class.getClassLoader().getResourceAsStream("/com/pro/mockfiles/My-DOC-FILE.doc");

这段代码更健壮,因为无论应用程序从哪里开始,它都可以工作。


推荐阅读