web-dev-qa-db-ja.com

静的コンテキストからgetclass()。getResource()を取得する方法は?

サンプルプロジェクトがそう言っているので、ファイルをURLオブジェクトにロードしようとしている関数があります。

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にかなり慣れていないので、何か間違ったことをしていることを知っています。

34
roymustang86

クラスロードメカニズム(クラスパスから)を使用してリソースをロードするために、getResourceがパラメーターとしてリソース名(StringではなくFile)を取るため、コンパイルできません。 )。 Fileとともに使用することは意味がありません。ファイルを開きたい場合は、FileInputStreamまたはFileReaderを使用してください。

http://docs.Oracle.com/javase/6/docs/api/Java/lang/ClassLoader.html#getResource%28Java.lang.String%29 を参照し、コンパイラエラーメッセージを含めます次回そのような質問があります。

7
JB Nizet

メインメソッドは静的メソッドであるため、this(=現在のオブジェクト)にアクセスしようとしても機能しません。その行を次のように置き換えることができます

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

From: Javaの静的メソッドからgetClass()を呼び出す方法

GetClass()の代わりにTheClassName.classを使用してください。

20
Andres

古い質問ですが、これはまだ言われていません。これは静的コンテキストから実行できます。

ClassLoader classLoader = ClassLoader.getSystemClassLoader();
classLoader.getResource("filename");
10
steven35
SecureFTP.class.getClassLoader().getResource(<<your resource name>>); 

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

3
Mariam