问题描述
我正在使用IntelliJ Idea,尝试从项目中的其他位置读取txt文件。我不想使用像C:/ User / ...这样的绝对路径,因为如果将项目移到其他位置,则该项目将无法再使用。我不确定路径的样子。
解决方法
如果您使用的是相对路径,这通常也意味着一旦更改目录结构,它将不再起作用。
示例(我在这里使用Windows)
java应用程序驻留在C:\Tools
中。您正在使用相对路径(..\file.txt
)。这将访问C:\file.txt
(..
将向上移动一个目录)。
如果您将应用程序移动到C:\Tools\JavaApp
,它将不再起作用,因为..\file.txt
现在指向C:\Tools\file.txt
)。
您可以通过多种选择来实现自己的目标(三种方法只是我的头上;有多种方法可以做到):
-
使用别名访问文件。 Here是可以使用的Windows快捷方式列表(我假设您使用的是Windows)。例如:将文件保存到
%appdata%
,它将始终保存到当前用户的appdata文件夹中。要将Windows快捷方式解析为Java中的绝对路径,请使用System.getenv("APPDATA")
。 -
从程序的工作目录中读取文件 这可能是您使用相对路径的意思: Java应用程序的当前工作目录是程序从中运行的目录。这将需要您将要读取的文件放置在与项目/ jar文件相同的文件夹中,或者使用相对路径导航到文件的位置,例如,在工作目录中的子文件夹中您将放置文件的位置。文件。
-
使用.properties文件声明文件位置 您也可以从属性文件中读取文件位置,但是只能在编译时更改路径。 Here's有关如何使用.properties文件的文章。
请参见this
您可以通过以下方式访问具有相对路径的文件:
File file = new File("..\\..\\file.txt");
String fileAbsolutePath = file.getAbsolutePath();
提示:仅当文件嵌入到项目中时,此功能才起作用。