从java程序中删除硬编码的文件路径

时间:2014-10-17 16:18:10

标签: java file path filereader filewriter

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

我的代码 - 这是我用来创建文本文件并将其写入文本文件的代码。

    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:\ New Folder \ chromedriver.exe”)。 有没有办法在java中删除它们。 我经历了类似的问题,但无法弄清楚如何检测文件的位置。

3 个答案:

答案 0 :(得分:2)

我根据建议进行了更改,这对我有用 -

// 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);

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

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

所以不要这样:

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

你可以拥有:

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

或类似的东西。