[英]How do I get a Java resource as a File?
我必須讀取包含字符串列表的文件。 我試圖按照這篇文章中的建議。 兩種解決方案都需要使用FileUtils.readLines
,但使用String
而不是File
作為參數。
Set<String> lines = new HashSet<String>(FileUtils.readLines("foo.txt"));
我需要一個File
。
這篇文章 將是我的問題,除了OP被完全禁止使用文件。 如果我想使用Apache方法,我需要一個文件,這是我最初的問題的首選解決方案。
我的文件很小(一百行左右)和每個程序實例的單例,所以我不需要擔心在內存中有另一個文件副本。 因此,我可以使用更基本的方法來讀取文件,但到目前為止看起來像FileUtils.readLines
可能更清潔。 我如何從資源到文件。
Apache Commons-IO有一個IOUtils類和一個FileUtils ,它包含一個類似於FileUtils中的readLines
方法 。
因此,您可以使用getResourceAsStream
或getSystemResourceAsStream
並將結果傳遞給IOUtils.readLines
以獲取文件內容的List<String>
:
List<String> myLines = IOUtils.readLines(ClassLoader.getSystemResourceAsStream("my_data_file.txt"));
我假設您要讀取的文件是類路徑上的真正資源,而不僅僅是您可以通過new File("path_to_file");
訪問的任意文件new File("path_to_file");
。
使用ClassLoader
嘗試以下操作,其中resource
是類路徑中資源文件路徑的String
表示形式。
resource
有效String
值可以包括:
"foo.txt"
"com/company/bar.txt"
"com\\\\company\\\\bar.txt"
"\\\\com\\\\company\\\\bar.txt"
和路徑不限於com.company
獲取File
不在JAR中的相關代碼:
File file = null;
try {
URL url = null;
ClassLoader classLoader = {YourClass}.class.getClassLoader();
if (classLoader != null) {
url = classLoader.getResource(resource);
}
if (url == null) {
url = ClassLoader.getSystemResource(resource);
}
if (url != null) {
try {
file = new File(url.toURI());
} catch (URISyntaxException e) {
file = new File(url.getPath());
}
}
} catch (Exception ex) { /* handle it */ }
// file may be null
或者,如果您的資源位於JAR中,則必須使用Class.getResourceAsStream(resource);
並使用BufferedReader
遍歷文件以模擬對readLines()
的調用。
使用資源將文件讀取到字符串:
String contents =
FileUtils.readFileToString(
new File(this.getClass().getResource("/myfile.log").toURI()));
使用輸入流:
List<String> listContents =
IOUtils.readLines(
this.getClass().getResourceAsStream("/myfile.log"));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.