2014-10-17 60 views
1

我创建了一个简单的Java程序,在该程序中创建一个文本文件并读取写入其中的数据。问题是我不想硬编码文件的路径,因为在开发应用程序后,我为我的程序创建了一个安装程序包,允许用户在那里安装系统。现在问题是最终用户可以在任何地方安装文件(即在C,D或E驱动器中),并且在这种情况下,我得到FileNotFoundException异常。从Java程序中删除硬编码的文件路径

我的代码 - 这是我用来创建和写入文本文件到文本文件的代码。

FileWriter file = new FileWriter("E:\\TextFile.txt",true); 
    BufferedWriter writer = new BufferedWriter(file); 
    writer.write(input); 
    write.newLine(); 
    write.close(); 

这是我用来从文本文件中读取文本的代码。

FileReader read = new FileReader("E:\\TextFile.txt"); 
    BufferedReader data = new BufferedReader(read); 

我有一个文件,我硬编码的文件的路径。

System.setProperty("webdriver.chrome.driver","D:\\New Folder\\chromedriver.exe"); 

正如你可以在我的代码看,我硬编码的路径( “E:\ TextFile.txt的”, “E:\ TextFile.txt的” 和 “d:\新建文件夹\ chromedriver.exe”) 。 有什么办法在Java中删除它们。 我经历了类似的问题,但无法弄清楚如何检测文件的位置。

+1

Youjust编辑源代码文件 - 你是什么意思删除它们? – Mark 2014-10-17 16:20:17

+1

您要求将它们从编译后的代码中移除?或者询问如何编辑源代码来纠正它?您无法从编译后的代码中真正删除引用...您需要在源代码中修复它并重新编译+打包您的应用程序 – user3062946 2014-10-17 16:20:52

+0

@Mark例如,代码包含的路径为“E:\\ TextFile.txt” 。正如你所看到的,该文件在E驱动器中,但是当用户安装该文件时,他可以将其安装在D驱动器中。在这种情况下,程序将抛出FileNotFoundException异常。所以我想找到一种方式,我可以告诉应用程序用户已经在这个位置安装了应用程序,并且可以从那里读取它。 – 2014-10-17 16:23:55

回答

2

我所做的更改为每suggetions和它的工作我 -

// This give me the path of the application where it is installed 
String Path = new File("").getAbsolutePath(); 

然后,我得到该文件的路径沿着添加文件名。

// Here i am adding the name of the file to the path to read it 
FileReader read = new FileReader(Path+"\\TextFile.txt"); 

// Here i am adding the name of the file to the path to write it 
FileWriter file = new FileWriter(Path+"\\TextFile.txt",true); 
0

您可以将文件位置存储在属性文件中,然后在运行时将文件位置从该位置读入变量。作为安装过程的一部分,您的安装程序必须将文件位置存储在属性文件中。

您也可以将文件存储在应用程序类路径中,并使用相对路径名来获取它。

+0

是否有任何文档可用,以便我可以通过它。 – 2014-10-17 16:25:12

+0

@Shantanu从属性文件读取可以使用简单的文件IO读取器完成,就像您已经使用的一样。我不确定你的安装程序包是如何工作的,但你真正需要做的是允许最终用户选择安装位置并将该位置保存到文件中。 – Grice 2014-10-17 16:29:50

+0

我正在使用Launch4j将我的jar转换为.exe格式,然后我使用Inno Setup Compiler 5.5.5(a)将.exe文件转换为安装程序包。我是否选择了错误的申请来完成这项工作? – 2014-10-17 16:36:57

0

我不认为这是你问的答案,但它是解决你的问题。您使用的是绝对路径,这意味着您指定了整个文件的URL,您可以改为使用相对路径,这与您的应用程序的位置相关,就像您在JAR中具有.class文件一样,您可以有一个文件夹,它将永远在相对于程序位置的相同位置。

因此,不是这样的:

FileReader read = new FileReader("E:\\TextFile.txt"); 

你可以有这样的:

FileReader read = new FileReader("..\MyFiles\TextFile.txt"); 

或像这样的东西。