2014-10-17 63 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"); 

或像這樣的東西。