2010-12-05 309 views
9

我試圖讀取特定包中的文本文件,但它返回無法找到。我可以讀取它插入絕對路徑,但我想讀取它而不插入絕對路徑。從特定的包中讀取txt文件Java

String texto = "Utils/CEP/Cidades/" + estado + ".txt"; 
FileReader fr = new FileReader(texto); 
BufferedReader in = new BufferedReader(fr); 

我該怎麼辦?

感謝

+0

你是什麼意思,「在一個特定的包裝」?哪個包? – skaffman 2010-12-05 21:36:01

+0

這看起來像是複製到以下問題: http://stackoverflow.com/questions/4359876/how-to-load-reference-a-file-as-a-file-instance-from-the-classpath – 2010-12-05 22:06:09

回答

22

您可以使用

InputStream in = 
    getClass().getResourceAsStream("/Utils/CEP/Ciades/" + estado + ".txt"); 
Reader fr = new InputStreamReader(in, "utf-8"); 

幾個圖片的標題說明:不要在包名稱中使用大寫字母;使用你的變量的英文名稱。這些都是公認的做法和慣例。

0

對於總的可移植性,可以考慮在地方使用文件分割符的正斜槓,但是,是的getResourceAsStream應該工作。請記住,如果你在eclipse中工作,你的類文件可能與你的工作目錄相關,所以如果它只是在你的項目文件夾中,你應該有它的工作方式,而不是getResourceAsStream。或者,如果您要訪問的資源位於源文件夾中,則每當您清理項目時都會將其複製到bin中,以便getResourceAsStream可以正常工作。

10

這可能有點晚,但這可能有助於其他許多人。這些方法訪問現有的資源,在項目

獲取資源形成默認的包從特定的軟件包

// Getting Resource as file object 
File f = new File(getClass().getResource("/com/vivek/core/excludedir.properties").getFile()); 

// Getting resource as stream object 
InputStream in = getClass().getResourceAsStream("/com/vivek/core/excludedir.properties"); 

注意

// Getting Resource as file object 
File f = new File(getClass().getResource("/excludedir.properties").getFile()); 

// Getting resource as stream object 
InputStream in = getClass().getResourceAsStream("/excludedir.properties"); 

獲取資源:的getclass( )是一個非靜態函數,不能從靜態上下文中調用。如果你想從靜態環境呼叫使用

YourClassName.class.getResource("/com/vivek/core/excludedir.properties").getFile() 

希望這會有所幫助。乾杯!!