1

私は2つのクラスを持っています

public class CsvReaderExample { 
    public static void main(String[] args) {
        try {               
    String file=CsvReaderExample.class.getResource("/saralbitta/common/db/DateNepali.csv").getFile();

次のクラスは

 public class LoanIssueView extends ViewPart {
    public LoanIssueView() {    
            }
            @Override
   public void createPartControl(Composite parent) {
   String file=LoanIssueView.class.getResource("/saralbitta/common/db/DateNepali.csv").getFile();

両方のクラスで印刷fileすると、1つのクラスで、最初のケースで以下のように出力が得られることに非常に驚いています。

 /E:/myskbbl/saralbitta/bin/saralbitta/common/db/DateNepali.csv 

同様に2番目のケースでは私はoutPutとして取得します

/saralbitta/common/db/DateNepali.csv

同じコードの2つのクラスが異なる出力を提供する理由。最初のケースのように出力が必要なため、2番目のケースでfileNotFoundExceptionが発生します。2番目のケースの最初のケースのような出力を取得するにはどうすればよいですか?

4

4 に答える 4

0

これらのプログラムはどこから実行されますか?リソースを検索するときに、絶対名を決定するアルゴリズムがあります。また、クラスローダーにも依存します。おそらくそれが、異なる結果が表示される理由です。

于 2012-09-11T10:51:12.060 に答える
0

getResourceとの両方のドキュメントを確認してください。findResource

最初のケースでgetResource()は、ファイル文字列を返します。しかし、2 番目のケースでは、何らかの方法でパスを見つけることができず、ドキュメントに記載されているようにメソッドgetResource()を呼び出そうとします。findResource()

getResource:

このメソッドは、最初にリソースの親クラス ローダーを検索します。親が null の場合、仮想マシンに組み込まれているクラス ローダーのパスが検索されます。失敗すると、このメソッドは findResource(String) を呼び出してリソースを見つけます。

フローに応じてさまざまなメソッドが呼び出される可能性があるため、おそらくこれがさまざまな戻り文字列の理由である可能性があります。

于 2012-09-11T12:11:27.337 に答える
0

クラス CsvReaderExample と LoanIssueView は異なるバンドル/プラグインに含まれていますか? 各バンドルには独自のクラスパスがあり、許可しない限り、他のバンドルのクラスを見ることはできません。バンドル間の依存関係は、マニフェストで宣言されています。

編集:わかりました。最初のケースでは OSGi は開始されていないため、通常の Java アプリケーションです。2 番目のケースでは、OSGi が開始され、各バンドルが独自のクラスローダーを取得します。バンドルからリソースをリクエストしようとします。そこで getResource() メソッドを使用しますhttp://www.osgi.org/javadoc/r4v43/core/org/osgi/framework/Bundle.html#getResource%28java.lang.String%29BundleContextからバンドル参照を取得できます。BundleActivatorのstart() メソッドhttp://www.osgi.org/javadoc/r4v43/core/org/osgi/framework/BundleActivator.html#start%28org.osgi.framework.BundleContext%29からBundleContextを取得します。取得する URL はファイル URL ではないことに注意してください。FileLocatorを使用するURL をファイル URL http://help.eclipse.org/indigo/index.jsp?topic=%2Forg.eclipse.platform.doc.isv%2Freference%2Fapi%2Forg%2Feclipse%2Fcore%2Fruntime%2FFileLocatorに変換します。 .html .

于 2012-09-11T10:48:55.383 に答える
0

クラスパスの設定の違いが関係しているはずです。両方のアプリのクラスパス設定を確認してください。

于 2012-09-11T11:07:02.357 に答える