从 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 中有效,但我个人建议不要使用它们。平均原因是 'relative' 文件路径根据 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
之后的路径
Here是另一种方案,如何获取目录,应用启动于:
String current_dir = System.getProperty("user.dir");
在此之后,可以使用当前工作目录构建 .doc
的绝对路径:
Paths.get(current_dir, "test/java/com/pro/mockfiles/My-DOC-FILE.doc");
我正在尝试从我的项目目录访问 .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 中有效,但我个人建议不要使用它们。平均原因是 'relative' 文件路径根据 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
Here是另一种方案,如何获取目录,应用启动于:
String current_dir = System.getProperty("user.dir");
在此之后,可以使用当前工作目录构建 .doc
的绝对路径:
Paths.get(current_dir, "test/java/com/pro/mockfiles/My-DOC-FILE.doc");