在我的java代码中,我读/写文件。当我写一个文件时,我可以这样找到它:
FileOutputStream out = new FileOutputStream(new File("../MyProject/MyFile.xls"));
那我怎么不能以同样的方式加载属性文件呢?例如:
config = new FileInputStream("../src/ConfigFiles/config.txt");
上面的代码找不到该文件。它曾经是硬编码的,但我不能继续这样做。
我需要动态地读取/写入它们,因为我经常会切换计算机和工作空间。我需要做些什么来阅读这些文件吗?
答案 0 :(得分:2)
属性文件需要被视为资源。资源最终会出现在类路径中,需要使用ClassLoader进行读取。它们被打包到你的JAR / WAR中。
getClass().getClassLoader().getResourceAsStream("ConfigFiles/config.txt");
编辑:回答你的问题,为什么它以前工作但现在没有。当您访问磁盘上的文件时,您当然需要有它的路径。路径可以是相对的或绝对的。如果您通过IDE从同一个地方运行代码,那么您应该能够访问项目中的文件。特别是你的src中的文件。但是您的应用程序并不总是从同一个地方(相同的工作目录)执行。因此,您需要使用您的代码(在JAR或WAR中)打包一些重要文件,或者如果您知道该文件位于该系统的某个位置,则可以使用绝对路径访问这些文件。
例如,如果我需要访问/tmp/myFile.txt中的文件,并且我知道当我的程序执行该文件时,那么我可以使用你正在使用的FileInputStream访问它,我会通过它是绝对的道路。但是如果我的程序将运行在各种系统,Linux或Windows上,并且我知道它所需的文件将不会出现在磁盘上,那么我可以将这些文件打包在我的JAR / WAR中。这些文件通常称为"资源"或者"资源文件"。对于那些使用ClassLoader的人,如上所述。
从查看代码看起来,该文件位于您的src目录中,因此它将与您的src代码一起打包到JAR中,因此是一个资源文件。
我希望这有点帮助。