簡體   English   中英

如何將Java資源作為文件獲取?

[英]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方法

因此,您可以使用getResourceAsStreamgetSystemResourceAsStream並將結果傳遞給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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM