次の内容1〜4は、オンラインで収集された関連知識です。要約すると、それらは次の知識ポイントです。
1.プロパティファイルを読み取るために最も一般的に使用される方法inputstream in = getClass()。getResourceasStream( "Resourcename");この方法では、プロパティファイルと現在のクラスが同じフォルダーにあることが必要です。別のパッケージにある場合は、次のことを使用する必要があります。
inputstream ins = this.getClass()。getResourceAsStream( "/cn/zhao/properties/testPropertiesPath2.properties");
2。Javaでパスメソッドを取得します
3.パスの取得の簡単な実装
4.反射中にプロパティファイルを取得する3つの方法
1反射でプロパティファイルの取得に関する最も一般的な方法と考え:
Javaでプロパティファイルを読み取る方法はたくさんあります。インターネット上の最も一般的な記事は、「Javaのプロパティファイルを読み取る6つの方法」です。ただし、Javaアプリケーションでは、最も一般的に使用される方法は、java.lang.classクラスのgetResourceasStream(文字列名)メソッドを介して実装することです。しかし、私はプロパティファイルを読み取る多くのコードがこれを行うことを見てきました:
inputStream in = getClass()。getResourceAsStream( "Resourcename");
ここには問題があります。つまり、これはgetclass()を呼び出すときにデフォルトで省略されます!私たちは皆、これを静的(静的)メソッドまたは静的ブロックで使用できないことを知っています。その理由は、静的タイプのメソッドまたはコードブロックがクラス自体に属し、特定のオブジェクトに属していないためです。これ自体は現在のオブジェクトを表し、静的メソッドまたはブロックが呼び出されたときにオブジェクトは初期化されません。
問題は、特定のクラスにオブジェクトを持たせたくない場合、このクラスのデフォルトコンストラクターをプライベートに設定します。もちろん、他の一般的なコンストラクターは書きません。そして、私のクラスはツールクラスであり、これらはすべて静的な方法と変数です。静的ブロックまたは静的メソッドでプロパティファイルを取得したいのですが、この方法は機能しません。
それで、私は何をすべきですか?実際、このクラスはこのように使用されていません。クラスオブジェクトを取得する必要がありますが、これは簡単ではありません -
すべてのクラスの親クラスのオブジェクトを使用すると、クラス自体を書くために自分のものを使用するよりも、Object.classを使用する方が便利で安全ではありませんか?ハハ、ここにコミュニケーションを促進する例があります。
java.util.propertiesをインポートします。 java.io.inputStreamをインポートします。 java.io.ioexceptionをインポートします。 / ** *読み取りプロパティファイルの例private static string param2; static {properties prop = new Properties(); inputstream in = object。 class .getResourceasStream( "/test.properties"); {prop.load(in); param1 = prop.getProperty( "inityears1").trim(); param2 = prop.getProperty( "inityears2").trim(); } catch(ioexception e){e.printstacktrace(); }} / ***プライベートコンストラクター、オブジェクトは必要ありません* / private testProperties(){} public static string getParam1(){return param1; } public static string getParam2(){return param2; } public static void main(string args []){system.out.println(getParam1()); System.out.println(getParam2()); }}実行結果:
151
152
もちろん、object.classをint.classに置き換えても大丈夫です。ハハ、あなたはそれを試すことができます。
さらに、静的メソッドまたはブロックでプロパティファイルを読み取ると、クラスの名前でクラスオブジェクトを直接取得することが最も安全な方法があります。たとえば、この例では、testproperties.classとして記述できます。これが最も安全な方法です。
2パスを取得する方法:
file fileb = new file(this .getClass()。getResource( "").getPath());システム。 out .println( "fileb path:" + fileb);
2.2現在のクラスのプロジェクト名を取得します。
システム。 out .println( "user.dir path:" +system。getProperty( "user.dir"))
3.パスを取得するための簡単なJava実装
/ ***プロジェクトの相対パスの下にファイルの絶対パスを取得*** @param parentDir*たとえば、プロジェクトディレクトリにはターゲットファイルの親ディレクトリ、lib、bin、およびconfディレクトリがあります。プログラムはlibまたは* binで実行され、必要な構成ファイルはconfにあります。 getPath(string parentDir、string filename){string path = null; string userdir = system.getProperty( "user.dir"); string userdirname = new file(userdir).getname(); if(userdirname.equalsignorecase( "lib")|| userdirname.equalsignorecase( "bin")){file newf = new file(userdir);ファイルnewp = new file(newf.getParent()); if(filename.trim()。equals( "")){path = newp.getPath() + file.separator + parentDir; } else {path = newp.getPath() + file.separator + parentdir + file.separator + filename; }} else {if(filename.trim()。equals( "")){path = userdir + file.separator + parentdir; } else {path = userdir + file.separator + parentdir + file.separator + filename; }} return path; } 4反射を使用してパスを取得します。
InputStream IPS1 =列挙。 class .getClassLoader().GetResourCeasStream( "cn/zhao/enumstudy/testpropertiespath1.properties"); InputStream IPS2 =列挙。 class .getResourceasStream( "testPropertiesPath1.properties"); InputStream IPS3 =列挙。 class .getResourceasStream( "Properties/testPropertiesPath2.properties");
上記はこの記事のすべての内容です。みんなの学習に役立つことを願っています。誰もがwulin.comをもっとサポートすることを願っています。