2016-08-16 11 views
0

私はJavaとAndroidの両方のフレームワークを構築しています。私がそれに追加したい機能の1つは、プロジェクト自体からプロパティファイルをロードする必要があります。おそらく保つ私は、クロスプラットフォームのロードプロパティを作ることができます任意の方法は、(ありAndroidとJava:クロスプラットフォームのプロパティ読み込み

InputStream fis = getClass().getResource("path to properties").openStream(); 
properties.load(fis); 

AssetManager assetManager = MyApp.getContext().getAssets(); 
InputStream inputStream = assetManager.open("path to properties"); 
properties.load(inputStream); 

とJavaで私が行うことができます。

アンドロイドでは、私は、このようにそれを行うことができますAndroidの標準構造)? Googleで何も見つけられませんでした。

プロパティはクラスパス上にあると仮定してJavaメソッドを使用できるはずなので、質問は主にアンドロイド関連です。

ありがとうございます。

+0

Android SDKレベルに基づいて異なるInputStreamを開きます(1以上の場合)。Contextからアセットを照会します。そうでない場合、Javaソリューションにフォールバックします。 – Shark

+0

あなたの答えをありがとう。しかし、あなたのソリューションを使用しても、私はまだAndroidのコンテキストからの依存関係がありますし、私はフレームワークを使ってJavaでしか動かない場合はどうすれば解決できますか? – Aurasphere

答えて

1

クラスパスからリソースを取得する(たとえば、getClass()。getResource())やファイルシステムから(Androidアセットを使用して)リソースを取得することは根本的に異なります。クラスパスはファイルシステムを想定していませんが、標準のJavaでは、(クラスパスのルールが異なるOSGiコンテナでフレームワークが使用される場合は)すぐに問題に遭遇することはありません。

私はなぜあなたが参照しているファイルがファイルシステム(アセット内)にあるのか、Javaの場合はクラスパス上にあるのでしょうか?

私は、これらのファイルをAndroid用のクラスパスに配置するのが最善だろうと思いますか?これが不可能な場合は、ファイルベースのアプローチを使用してベースフォルダをどこかに設定してください。

+0

あなたの答えは本当に面白いです...私はパスがsrc/main/assetsなので、アセットフォルダはAndroidのクラスパスの下にあると思っていました。私はそのフォルダを使用しています。 /developer.android.com/studio/projects/index.html?hl=ko – Aurasphere

+0

はい、それは - あなたのAndroidアプリにrawファイルを追加するための標準の場所であるres/rawと一緒です。しかし、どちらもクラスパスにファイルを置く方法ではありません。通常、生ファイルは設定ファイルなどでない限り、クラスパス上に置かれません。 –

+0

私はそれを手に入れます。私はあなたのリソースをsrc/main/resourcesの下に置くMavenに慣れており、自動的にそのフォルダをクラスパスに追加します。私はGradleがsrcの下のすべてのフォルダで同じことをしたと思ったが、私は間違っていると思う。私はおそらくそれを行うためのビルドスクリプトを書くことができますが、私はおそらく2つの異なるリリース、Java用と1つはアンドロイドのために行くだろうので、フレームワークの多くのユーザーフレンドリーではないだろうと思います。ありがとうございました。 – Aurasphere

関連する問題