簡體   English   中英

ClassLoader getResourceAsStream 返回 null

[英]ClassLoader getResourceAsStream returns null

我的項目目錄結構(在 Eclipse 中):

MyProject/
    src/        --> "source directory" on Eclipse's classpath/buildpath
        com.me.myapp
            Driver
            myconfig.txt

Driver ,我有以下代碼:

public class Driver {
    public static void main(String[] args) {
        InputStream is = ClassLoader.getSystemClassLoader.getResourceAsStream("myconfig.txt");
        if(is == null)
            System.out.println("input stream is null");
        else
            System.out.println("input stream is NOT null :-)");
    }
}

當我運行它時,我得到以下控制台輸出:

input stream is null

為什么? 我是否將myconfig.txt放在了錯誤的位置? 我是否錯誤地使用了 ClassLoader API? 還有什么? 提前致謝!

如果它在同一個包中使用

InputStream is = Driver.class.getResourceAsStream("myconfig.txt");

你擁有它的方式

InputStream is = ClassLoader.getSystemClassLoader().getResourceAsStream("myconfig.txt");

它正在類路徑的根目錄中查找文件。 你可以用

InputStream is = ClassLoader.getSystemClassLoader().getResourceAsStream("com/me/myapp/myconfig.txt");

搜索規則在ClassLoader#getResource(String)javadoc 和Class#getResource(String)javadoc 中有解釋。

如果您正在使用 Maven,請在BUILD標記下添加以下行。 當您在服務器上運行 web 應用程序但沒有引用服務器上的資源時,您會收到此錯誤。

因此,將以下內容添加到您的 POM.xml 中並查看魔法。

<resources>
    <resource>
        <directory>src/main/resources</directory>
        <filtering>true</filtering>
        <includes>
            <include>fileName.txt</include>
        </includes>
    </resource>
    <resource>
        <directory>src/main/resources</directory>
        <filtering>true</filtering>
        <includes>
            <include>fileName.wsdl</include>
        </includes>
    </resource>
</resources>

玩得開心.!!!

  • 而不是-

    InputStream is = ClassLoader.getSystemClassLoader.getResourceAsStream("myconfig.txt");

  • 使用-

    InputStream is = ClassLoader.getSystemClassLoader.getResourceAsStream("com/me/myapp/myconfig.txt");

  • 注意:打包前無需提供源文件夾名稱( src )。

暫無
暫無

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

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