2013-09-24 136 views
2

我對Java很新,而且我遇到了一個我找不到解決方案的問題。 我寫了一個程序,讀取和寫入一個txt文件。當我在NetBeans中運行它時,它似乎工作正常,但是當我嘗試運行JAR文件時,似乎程序無法訪問txt文件。Jar無法訪問txt文件

File data = new File("src/data.txt"); 

可能的原因,它不會工作在創建文件:

我用下面的代碼中創建的文件?如果不是,它會是什麼?

編輯: 如果我使用輸入流,我將無法寫入或更改txt文件,我應該改變管理數據的方式? (txt文件)還是有一種方法讓jar仍然可以訪問txt文件?

回答

4

方法1:在創建jar並運行程序的地方,jar目錄下沒有名爲「src」的文件夾。您應該在jar位置的相同目錄中創建一個名爲「src」的文件夾。這將允許文件寫入操作。

方法2:如果你想保持罐子裏面的txt文件,那麼你可以使用:

InputStream in = this.getClass().getClassLoader() 
          .getResourceAsStream("your package path/data.txt"); 

一個完整的例子:

package com.file.loader; 

public class Main { 
    public static void main(String[] args) throws IOException { 
    InputStream in = Main.class.getClassLoader().getResourceAsStream(
      "com/file/loader/data.txt"); 
    } 
} 
+0

我已經嘗試將文件放在不同的包中,但不起作用 –

+0

請發佈您的包名和您提供的路徑 –

+0

包名:storageData和文件名是data.txt。但看看我編輯過的東西。我想要寫入該文件,而不是隻讀它 –

8

本聲明

File data = new File("src/data.txt"); 

relys上的文件存在於文件系統。你需要閱讀的文件作爲一種資源,這樣的JAR文件可獨立於文本的運行文件

InputStream input = getClass().getResourceAsStream("/path/to/data.txt"); 

編輯:

我建議使用存儲在文本文件中作爲戰略一個「默認」,然後當需要更改時,在「user.home」下寫一個新文件。在讀取任何數據之前檢查修改後的文件是否存在。

+0

只是出於興趣:你能解釋你的解決方案和@ shamimz的答案在下面的區別?我無法完成它。 – jazzbassrob

+1

另外我剛剛意識到OP說他也在寫文件;所以他的問題肯定不僅僅是這個?這聽起來像他真的想要讀/寫磁盤上的文件,他的問題是使用可能不存在的src'目錄... – jazzbassrob

+1

@jazzbassrob關於你的第一個問題有一些2之間的細微差別,比如這個approacj需要指定絕對路徑,即需要前導'/'。看到這個[回答](http://stackoverflow.com/questions/676250/different-ways-of-loading-a-file-as-an-inputstream) – Reimeus