簡體   English   中英

無法使用 getResourceAsStream 讀取文件

[英]unable to read file using getResourceAsStream

我有一個像 Project 這樣的文件夾結構

  • 源文件
  • --TestMain.java
  • 垃圾桶
  • --TestMain.class
  • 資源
  • --test.txt

由於整個項目將被打包成一個 jar 文件,我必須使用 getResourceAsStream 從資源中讀取一個文件。 盡管我已經通讀了有關 getResourceAsStream 的所有問題,但我仍然無法解決這個問題。 有人可以幫忙嗎? 謝謝!

public class TestMain {

public static void main(String[] args) throws Exception{
// TODO Auto-generated method stub

InputStream stream = TestMain.class.getResourceAsStream("\resources\test.txt");
    System.out.println(stream);
    BufferedReader bufRead = new BufferedReader(new InputStreamReader(stream));
    StringBuilder builder = new StringBuilder();
    String line=null;
    while((line=bufRead.readLine())!=null){
        builder.append(line).append("\n");
    }
    System.out.println(builder.toString());

}
}

基本上,有兩種不同的方法: ClassLoader.getResourceAsStream()Class.getResourceAsStream() 這兩種方法將不同地定位資源。

Class.getResourceAsStream(path) ,路徑被解釋為調用它的類的包的本地路徑。 例如,調用String.getResourceAsStream("file.txt")將在類路徑中的以下位置查找文件: "java/lang/file.txt" 如果您的路徑以/開頭,則它將被視為絕對路徑,並將從類路徑的根開始搜索。 因此,調用String.getResourceAsStream("/myfile.txt")將查看類路徑中的以下位置 ./file.txt。

ClassLoader.getResourceAsStream(path)會將所有路徑視為絕對路徑。 因此,調用String.getClassLoader().getResourceAsString("myfile.txt")String.getClassLoader().getResourceAsString("/file.txt")都會在類路徑中的以下位置查找文件: ./file.txt

每次定位時,它可能是文件系統本身中的一個位置,也可能是相應 jar 文件中的一個位置,具體取決於您從中加載資源的 Class 和/或 ClassLoader。

如果您從應用程序服務器加載類,那么您應該使用Thread.currentThread().getContextClassLoader().getResourceAsStream(fileName)而不是this.getClass().getClassLoader().getResourceAsStream(fileName) this.getClass().getResourceAsStream()也可以工作。

似乎文件夾“資源”在您的類路徑中,在其下獲取資源時不需要它,請嘗試以下

InputStream stream = TestMain.class.getResourceAsStream("test.txt");

你的 test.txt 在你的類路徑中嗎? 我認為您的 test.txt 不在您的類路徑中。 你有很多解決方案可以做到這一點。

  • 一個可以提供文件的完整路徑(c:/......)

  • 驗證生成 .jar 文件時,您的 txt 是否在 .jar 中。 如果沒有在你的java項目中包含你的資源文件夾。 當您直接為 getResourceAsStream ("test.txt") 創建路徑時

對於 Java 項目的不兼容資源,請使用第一個選項,但如果沒有意義,請使用第二個選項。

假設您使用的是 httpclient:

        HttpClient httpClient = new HttpClient();

        httpClient.getHostConfiguration().setProxy(proxyHost, proxyPort);//your proxyHost & your proxyPort,

        GetMethod getMethod = new GetMethod(url);//your url,

        try {
            httpClient.executeMethod(getMethod);
            //strData = getMethod.getResponseBodyAsString();

            InputStream resStream = getMethod.getResponseBodyAsStream();
            BufferedReader br = new BufferedReader(new InputStreamReader(resStream));
            StringBuffer resBuffer = new StringBuffer();
            String resTemp = "";
            while((resTemp = br.readLine()) != null){
                resBuffer.append(resTemp);
            }
            String response = resBuffer.toString();             
        } catch (Exception e) {
            System.out.println("HttpProxyManager.getResponse returns NULL");
            e.printStackTrace();
        } finally {
            getMethod.releaseConnection();
        }

字符串響應應該是你想要的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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