2010-12-05 33 views
52

我有一個文件位於我的類路徑中,例如, com/path/to/file.txt。我需要加載或引用此文件作爲java.io.File對象。這是因爲我需要使用java.io.RandomAccessFile來訪問文件(文件很大,我需要尋找某個字節的偏移量)。這可能嗎? RandomAccessFile的構造函數需要一個File實例或String(路徑)。如何從類路徑加載/引用文件作爲File實例

如果還有另一種解決方案尋求某個字節偏移量並讀取該行,我也對此表示贊同。

+0

工作端到端的例子是這裏的細節:[https://stackoverflow.com/questions/1464291/how-to-really-read-text-file-from-classpath-in-java/49120666#49120666] – ravibeli 2018-03-05 22:43:36

回答

175

嘗試獲得一個網址的擱置你的classpath資源:

URL url = this.getClass().getResource("/com/path/to/file.txt") 

然後使用接受URI的構造函數創建一個文件:

File file = new File(url.toURI()); 
+0

哇!這是快速和正確的。謝謝! – jake 2010-12-05 17:01:49

+11

任何機會,你可以用大綠色的勾號接受這個答案? :) – joelittlejohn 2010-12-06 13:12:03

+0

對不起,我還不能投票。 – jake 2010-12-13 03:39:48

3

或者使用直接使用資源的InputStream絕對CLASSPATH路徑(以/斜槓字符開頭):

 

getClass().getResourceAsStream("/com/path/to/file.txt"); 
 

或相對路徑CLASSPATH(如果你正在寫的類是在同一個Java包的資源文件本身,即com.path.to):

 

getClass().getResourceAsStream("file.txt"); 
 
41

這也適用,並且不需要/路徑/到/文件URI轉換。如果該文件在類路徑中,則會找到它。

File currFile = new File(getClass().getClassLoader().getResource("the_file.txt").getFile()); 
14

我覺得這是一個行代碼作爲最有效和最有用:

File file = new File(ClassLoader.getSystemResource("com/path/to/file.txt").getFile()); 

就像一個魅力。