java - 从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");
这段代码更健壮,因为无论应用程序从哪里开始,它都可以工作。
推荐阅读
- azure - 基于路径的作业条件
- javascript - 如何将我的文本添加到发送我的窗口进行打印的功能
- sql - 关于一些代码来查找不在表格中的所有内容的逻辑?
- javascript - SurveyJS:在 React 中禁用自动感谢消息
- leaflet - Drupal 8 - 传单模块
- powershell - 使用 Powershell 从 Avaya 导出数据
- javascript - 那么如何显示用户选择的PDF,如何从html保存到PDF
- batch-file - 我看不到最后一个 ECHO 语句有什么原因吗?
- string - 如何使用pyspark中的pandas_udf拆分数据框中的字符串
- java - 使用 Hibernate JPQL 将日期格式化为 ISO 8601