如何从Java项目中的相对路径读取文件? java.io.File 找不到指定的路径

新手上路,请多包涵

我有一个包含 2 个包的项目:

  1. tkorg.idrs.core.searchengines
  2. tkorg.idrs.core.searchengines

在包 (2) 我有一个文本文件 ListStopWords.txt ,在包 (1) 我有一个类 FileLoadder 。这是 FileLoader 中的代码:

 File file = new File("properties\\files\\ListStopWords.txt");

但我有这个错误:

该系统找不到指定的路径

你能给出解决方案吗?

原文由 tiendv 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 692
2 个回答

如果它已经在类路径中,那么只需从类路径而不是从磁盘文件系统中获取它。不要摆弄 java.io.File 中的相对路径。它们依赖于您完全无法从 Java 代码内部控制的当前工作目录。

假设 ListStopWords.txt 与您的 FileLoader 类在同一个包中,然后执行:

 URL url = getClass().getResource("ListStopWords.txt");
File file = new File(url.getPath());

或者,如果您最终所追求的实际上是 InputStream

 InputStream input = getClass().getResourceAsStream("ListStopWords.txt");

这肯定比创建 new File() 更可取,因为 url 可能不一定代表磁盘文件系统路径,但它也可能代表虚拟文件系统路径(当 JAR 是扩展到内存而不是磁盘文件系统上的临时文件夹)甚至是网络路径,它们都不是每个定义都不能被 File 构造函数消化。

如果文件 - 如包名称提示 - 实际上是 一个完整的 属性文件(包含 key=value 行),只是“错误”扩展名,那么您可以立即将 InputStream 提供给 load() 方法。

 Properties properties = new Properties();
properties.load(getClass().getResourceAsStream("ListStopWords.txt"));

注意:当您尝试从 static 上下文中访问它时,请使用 FileLoader.class (或任何 YourClass.class getClass() 而不是在上面的例子中。

原文由 BalusC 发布,翻译遵循 CC BY-SA 4.0 许可协议

相对路径在 Java 中使用 . 说明符工作。

  • . 表示与当前运行的上下文相同的文件夹。
  • .. 表示当前运行上下文的父文件夹。

所以问题是你怎么知道Java当前正在寻找的路径?

做一个小实验

   File directory = new File("./");
   System.out.println(directory.getAbsolutePath());

观察输出,你就会知道 Java 正在寻找的当前目录。从那里,只需使用 ./ 说明符即可找到您的文件。

例如,如果输出是

G:\JAVA8Ws\MyProject\内容。

并且您的文件存在于“MyProject”文件夹中,只需使用

File resourceFile = new File("../myFile.txt");

希望这可以帮助。

原文由 Samrat 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题