繁体   English   中英

从Windows中的相对路径获取文件

[英]Get file from relative path in 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)

我想使用相对路径,您能帮忙吗?

尽管相对路径可能在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");

该代码更健壮,因为无论从何处启动应用程序,它都将起作用。

看来您正在任何服务器上运行应用程序。
因此,当您在服务器上运行它时,应用程序将采用相对于该服务器根目录的路径(可以是/bin或其他名称,具体取决于您的服务器)。
当您将其作为独立的Java程序运行时,它将采用相对于独立程序执行位置的路径。
因此,如果要在服务器上运行它,请提供相对于服务器根目录的路径。
喜欢:-
File initialFile = new File("<Path after Server root>/test/java/com/pro/mockfiles/My-DOC-FILE.doc");

<Server root>可以是C:/ Myserver / bin之后的路径

是另一个解决方案,如何获取目录,应用程序已在以下位置启动:

String current_dir = System.getProperty("user.dir");

之后,可以使用当前工作目录构建.doc的绝对路径:

Paths.get(current_dir, "test/java/com/pro/mockfiles/My-DOC-FILE.doc");

Paths.get(...)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM