2011-12-02 7 views
27

私はURLオブジェクトにファイルをロードしようとしていますが、この例のプロジェクトではこのように言いました。getclass()。getResource()を静的コンテキストから取得する方法?

public class SecureFTP { 

    public static void main(String[] args) throws IOException , ClassNotFoundException, SQLException , JSchException, SftpException{ 
     File file = new File("/home/xxxxx/.ssh/authorized_keys"); 
     URL keyFileURL = this.getClass().getClassLoader().getResource(file); 

私はSecureFTP.class.getResourceを使用しようとしましたが、まだコンパイルできませんでした。

私はJavaにはかなり新しいので、間違ったことをしています。

答えて

5

によってその行を置き換えることができますクラスパス)。 Fileでそれを使用することは意味がありません。ファイルを開く場合は、FileInputStreamまたはFileReaderを使用してください。

http://docs.oracle.com/javase/6/docs/api/java/lang/ClassLoader.html#getResource%28java.lang.String%29を参照し、次にそのような質問があるときにコンパイラのエラーメッセージが表示されます。

53

主な方法は静的メソッドなので、this(=現在のオブジェクト)にアクセスしようとすると機能しません。 getResourceから(クラスローディング機構を使用してリソースをロードするためには、パラメータとしてリソース名(String、およびないFile)を要するため、 あなたはそれをコンパイルすることはできません

URL keyFileURL = SecureFTP.class.getClassLoader().getResource("/home/xxxxx/.ssh/authorized_keys"); 
+0

これは、OPが試みたこととまったく同じです。質問をもっと巧みに読んでください。問題は、メソッドにSTringではなくFileを渡していることです。 –

+0

あなたは正しいです。私は自分の答えを修正した。しかし、OPはSecureFTP.class.getResourceをgetClassLoaderコールなしで試しました – Robin

+0

メソッドは機能しません。getResourceはファイルシステムからリソースをロードせず、リソース名は/で始まらない。私の答えを読んでください。 –

3
SecureFTP.class.getClassLoader().getResource(<<your resource name>>); 

このトリックを行う必要があります!

5

古い質問ですが、これはまだ述べていません。これは静的コンテキストから行うことができます:

ClassLoader classLoader = ClassLoader.getSystemClassLoader(); 
classLoader.getResource("filename"); 
関連する問題