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

2022-08-31 07:56:24

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

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

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

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

但是有这个错误:

The system cannot find the path specified

你能给出一个解决方案来解决这个问题吗?谢谢。


答案 1

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

假设它与你的类位于同一包中,那么请执行:ListStopWords.txtFileLoader

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

或者,如果您最终追求的只是其中之一:InputStream

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

这当然比创建更可取,因为 可能不一定表示磁盘文件系统路径,但它也可以表示虚拟文件系统路径(当 JAR 扩展到内存而不是磁盘文件系统上的临时文件夹时,可能会发生这种情况),甚至是网络路径,这两者都不是每个定义都可以由构造函数消化的。new File()urlFile

如果文件 (如包名称所提示的) 实际上是一个具有 “错误” 扩展名的完全有价值的属性文件(包含行),则可以立即将 该文件提供给 load() 方法。key=valueInputStream

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

注意:当您尝试从内部上下文访问它时,请使用(或其他任何内容)而不是在上面的示例中。staticFileLoader.classYourClass.classgetClass()


答案 2

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

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

所以问题是你怎么知道Java目前所处的路径?

做一个小实验

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

观察输出,您将了解Java正在查找的当前目录。从那里,只需使用说明符来查找文件即可。./

例如,如果输出是

G:\JAVA8Ws\MyProject\content.

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

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

希望这有帮助。