读取 java 中的动态文件路径

Reading dynamic file paths in java

在我的 java 代码中,我 read/write 到文件。当我写入文件时,我可以这样定位它:

FileOutputStream out = new FileOutputStream(new File("../MyProject/MyFile.xls"));

那我怎么不能以同样的方式加载 属性 文件呢?例如:

config = new FileInputStream("../src/ConfigFiles/config.txt");

以上代码没有找到文件。它曾经是硬编码的,但我不能继续这样做了。

我需要动态地 read/write 它们,因为我会经常切换计算机和工作空间。我需要做些什么来读取这些文件吗?

属性 个文件需要被视为资源。资源最终位于您的类路径中,需要使用 ClassLoader 读取。它们被打包到您的 JAR/WAR.

getClass().getClassLoader().getResourceAsStream("ConfigFiles/config.txt");

编辑:回答你的问题,为什么它以前有效但现在无效。当您访问磁盘上的文件时,您当然需要知道它的路径。路径可以是相对的或绝对的。如果您通过 IDE 从同一个地方 运行 您的代码,那么您应该能够访问项目中的文件。特别是您的 src 中的文件。但是您的应用程序不会总是从同一个地方(同一个工作目录)执行。因此,您需要将一些重要文件与您的代码打包在一起(在 JAR 或 WAR 中),或者您可以使用绝对路径访问这些文件,如果您知道该文件位于该系统的某个位置。

例如,如果我需要访问 /tmp/myFile.txt 中的文件,并且我知道每当我的程序执行时该文件就在那里,那么我可以使用您正在使用的 FileInputStream 访问它并且我会通过它的绝对路径。但是如果我的程序将在各种系统上 运行,Linux 或 windows,并且我知道它需要的文件不会出现在磁盘上,那么我可以将这些文件打包到我的 JAR/WAR。这些文件通常称为 "resources" 或 "resource files"。如前所述,对于那些使用 ClassLoader 的人。

从您的代码来看,该文件似乎在您的 src 目录中,因此它将与您的 src 代码一起打包到 JAR 中,因此是一个资源文件。

希望对您有所帮助。