48

これがどのように可能かわからない。getResourceAsStreamを読み直しましたが、常にnullが返されます。

InputStream source = this.getClass().getResourceAsStream("test.xml");

Finderのtest.javaのすぐ隣(OS XとEclipseを使用)はtest.xmlです

TextWranglerで開き、データが内部にあるものとして表示できます。

これは、違いが生じる場合のJUnitテストです。私はシステム上の既存のJunitテストを調べて、実際の例とまったく同じ方法で使用しています(ファイルの場所やコード自体など)。

getClass()が正しいパスを返すのを妨げる小さな違いは何ですか?

ありがとう!

4

13 に答える 13

30

クラスパスでリソースが見つかりません。junitとmavenを使用している場合は、セクション<include>にファイルディレクティブを追加して、リソースがターゲット/テストクラスにコピーされていることを確認してください<testResource>

次を使用して、ファイルシステム内のクラスの場所を確認することもできます。

this.getClass().getResource(".")

リソースがそこにあるかどうかを確認します

于 2011-06-30T21:12:02.703 に答える
25

getResourceAsStream()はCLASSPATHを使用しているため、ソースファイルではなく、クラスがどこにある場合でもロードされます。

XMLを.classファイルと同じディレクトリにコピーする必要があると思います。

于 2011-03-08T20:44:15.040 に答える
22

Mavenを使用している場合は、この部分をpom.xml

<build>
    <testResources>
        <testResource>
            <directory>${project.basedir}/src/test/resources</directory>
        </testResource>
    </testResources>
</build>

あなたtest.xmlと他のリソースファイルはにある必要がありますsrc/test/resources

于 2015-03-26T13:45:27.547 に答える
12

私はいつもこの方法に問題があります。ここに役立つかもしれない2つのリンクがあります:

私はいつも最初に「/」または「./」を追加して実験します。

私の経験から、最良の方法はFileInputStreamを使用することです。(EclipseでFileInputStreamを使用している間)覚えておくべきことは1つだけです。デフォルト設定では、作業ディレクトリはプロジェクトルートに設定されます。このコードを使用して、現在のディレクトリがどこにあるか(および必要な相対パス)をいつでも確認できます。

于 2011-03-08T21:12:36.747 に答える
9

ルートソースフォルダのtest.xmlすぐ下にあると仮定して、次のようにします。-test

InputStream source = this.getClass().getClassLoader().getResourceAsStream("test.xml");
于 2011-03-08T21:51:46.727 に答える
3

この問題に多くの時間を費やしましたが、次の構成がありませんでした。Eclipseプロジェクトを右クリックし、[プロパティ]-> [Javaビルドパス]->[ソース]を選択して、含まれる行を 編集し、*。properties (* .fileExtension)を追加します。

于 2017-12-21T19:21:02.467 に答える
2

test.xmlをsrc/main / resources(またはsrc / test / resources)に配置します。

File file = ResourceUtils.getFile("classpath:test.xml");
String test = new String(Files.readAllBytes(file.toPath()));
于 2019-10-23T05:49:42.053 に答える
2

クラスローダーを使用してみてください

InputStream source = this.getClass().getClassLoader().getResourceAsStream("test.xml");
于 2020-03-02T11:00:28.517 に答える
0

MyClass.getResourceAsStream()を試してください。

また、test.xmlをクラスパスに入れてみてください。たとえば、Eclipse Webプロジェクトでは、text.xmlをwebcontent / WEB-INF/classesに配置します。

于 2011-03-08T21:10:58.373 に答える
0

Java APIから:

http://docs.oracle.com/javase/6/docs/api/java/lang/ClassLoader.html#getSystemResource(java.lang.String)

クラスのロードに使用される検索パスから、指定された名前のリソースを検索します。このメソッドは、システムクラスローダーを介してリソースを検索します

したがって、構文はたとえば次のようになります。ClassLoader.getSystemResource( "test.xml")。toString();

チャームのように機能します!

于 2013-06-12T09:10:46.547 に答える
-1

リソースファイルが含まれているフォルダーをeclipseのソースフォルダーに追加します。次に、ファイルは自動的にbinディレクトリに配置されます。

于 2012-02-09T00:21:05.547 に答える
-1

リソースファイルのコピーをテストリソースに配置する必要があります。私の例では、フォントファイルです。

ここに画像の説明を入力してください

次に、jUnitテストから次に呼び出します。

 public static InputStream getFontAsStream() throws IOException {
        return Thread.currentThread().getContextClassLoader()
                    .getResourceAsStream("fonts/" + "FreeSans.ttf");
    }
于 2017-07-26T07:23:17.967 に答える
-2

Springクラスでこの問題が発生しました。System.class.getResourceAsStream(...)ユニットテストでは機能しましたがTomcatでは機能しませんでした。Tomcatでは機能しましたがユニットテストThread.currentThread().getContextClassLoader().getResourceAsStream(...)では機能しませんでした。

結局、私は一緒に行きました:

ClassUtils.getDefaultClassLoader()
    .getResourceAsStream("com/example/mail/templates/invoice-past-due.html"))

また、このようにすると、スラッシュで始まるパスを作成する必要がないこともわかりました。

于 2016-11-11T23:12:44.480 に答える