【问题标题】:Get file from relative path in windows从windows中的相对路径获取文件
【发布时间】:2019-05-04 11:08:29
【问题描述】:

我正在尝试从我的项目目录中访问 .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 使用相对路径;检查 CWD!
  • 您可以使用 File.separatorChar 代替“/”或“\”
  • 相对于什么?你的类文件在哪里?
  • 我的 doc 文件的相对路径,该文件位于我的项目 @ScaryWombat 的单独目录中
  • 你能解释更多关于 File.separatorChar @BishalGautam

标签: java inputstream fileinputstream


【解决方案1】:

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

此代码更加健壮,因为无论应用程序从何处启动,它都可以工作。

【讨论】:

  • 有时您所描述的行为是预期的,例如如果用户提供了相对路径。
  • 感谢 Gerben 的解释
【解决方案2】:

Here是另一种解决方案,如何获取目录,应用启动于:

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

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

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

Paths.get(...)

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-11-11
      • 2014-07-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-31
      • 1970-01-01
      • 2017-04-21
      相关资源
      最近更新 更多