【问题标题】:Remove hardcoded file path from java program从 java 程序中删除硬编码的文件路径
【发布时间】:2014-12-13 06:55:36
【问题描述】:

我创建了一个简单的 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中有没有办法删除它们? 我经历了类似的问题,但无法弄清楚如何检测文件的位置。

【问题讨论】:

  • 你只是编辑源代码文件 - 你是什么意思删除它们?
  • 您要从编译后的代码中删除它们?或者问如何编辑源来纠正它?你不能真正从编译的代码中删除引用......你需要在源代码中修复它并重新编译 + 打包你的应用程序
  • @Mark 例如,代码包含路径为“E:\\TextFile.txt”。如您所见,该文件位于 E 盘中,但当用户安装该文件时,他可能会将其安装在 D 盘中。在这种情况下,程序会抛出 FileNotFoundException 异常。所以我想找到一种方法,我可以告诉应用程序用户已经在这个位置安装了应用程序,你可以从那里读取它。
  • 从外部文件而不是从代码中读取

标签: java file path filereader filewriter


【解决方案1】:

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

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

【讨论】:

  • 是否有任何可用的文档让我可以通过它。
  • @Shantanu 从属性文件中读取可以使用简单的文件 IO 读取器来完成,就像您已经在使用的那样。我不确定您的安装程序包是如何工作的,但实际上您需要做的就是允许最终用户选择安装位置并将该位置保存到文件中。
  • 我使用 Launch4j 将我的 jar 转换为 .exe 格式,然后我使用 Inno Setup Compiler 5.5.5(a) 将 .exe 文件转换为安装程序包。我是否选择了错误的应用程序来完成这项工作?
  • @Shantanu 我查看了 Inno Setup,它似乎支持 Pascal Scripting 允许用户输入和条件文件操作。尝试阅读一些文档。
【解决方案2】:

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

所以不要这样:

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

你可以有这个:

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

或者类似的东西。

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-09-19
      • 1970-01-01
      • 1970-01-01
      • 2014-03-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多