JARファイル内にあるパブリッククラスからデータファイルにアクセスしようとしています。しかし、Hadoopクラスター上でjarファイルを実行すると、システムはFileNotFoundExceptionをスローします。一番下の行はです。クラスタ上でアプリケーションを実行しているときにJar内のリソースにアクセスすることは可能ですか?また、リソースをHDFSに個別にコピーする必要がありますか?上記のいずれの場合でも、 ?Jarファイルから.datファイルにアクセス
ありがとうございました!
JARファイル内にあるパブリッククラスからデータファイルにアクセスしようとしています。しかし、Hadoopクラスター上でjarファイルを実行すると、システムはFileNotFoundExceptionをスローします。一番下の行はです。クラスタ上でアプリケーションを実行しているときにJar内のリソースにアクセスすることは可能ですか?また、リソースをHDFSに個別にコピーする必要がありますか?上記のいずれの場合でも、 ?Jarファイルから.datファイルにアクセス
ありがとうございました!
はい、JARがCLASSPATHにある場合は、クラスローダーまたはサーブレットコンテキストを使用してgetResourceAsStream()
を呼び出して、そのファイルのInputStreamへの参照を取得できます。
ファイルパスにアクセスすることはできません。 CLASSPATHに相対的なパスを与え、クラスローダーがそのファイルを見つけます。内容は取得できますが、絶対位置は取得できません。
あなたは絶対的な場所を望むべきではありません。あなたはそれで何をしますか?
ファイルに書き込むことはできません。何も変えることはできません。あなたのアプリがWARファイルにパッケージ化されている場合は、その内容を変更することはできません。
InputStreamはJAR内のファイルパスを文字列としてプログラムに渡すか、ストリーム全体としてファイルを読み込んでいます。なぜなら、ファイルがある場所の文字列が必要だからです。 –
OPは実際に2つの質問を 'どちらか/または'の形式で尋ねたので、「はい」はやや混乱します。あなたの答えの残りの部分はかなり明確です。 –
* "ファイルがある場所に文字列が必要です" * 1)ファイルではなく、アーカイブ内のリソースです。 2) 'File'または' URL'オブジェクトを 'String'に変換することは、ほとんど** **まったく良いアイデアです。なぜあなたはそれが必要だと思いますか? –