JavaにおけるPropertiesクラスの概要


以前はプロジェクトのプロファイルに対してxmlに出会って、私たちは直接今のオープンソースフレームワークdom 4 jあるいはjdomで解析しましたが、今propertiesという接尾辞のファイルに出会って、中に保存されているのはすべていくつかのキー値のペアで、考えてみて、私たちはまだその2つの方法で分析することができますか?もしできるならば、それは弟がまだどのレベルに接触していないことを意味して、今最もよく使われているxmlファイルに対する解析しか使いませんが、次のキー値のようなペアに出会ったら、私たちはどうすればいいですか?一行の行を読み、等号の位置を判断して切り取るのか.君のやり方が悪いとは言えないが、簡単な方法があれば、どうして使わないのか.自分で読むロジックを書くの?また、コードの多重性を考慮すると、パフォーマンスの問題も考慮せざるを得ません.一般的には、Javaが提供するapiも鍛えられています.牛迫の開発者でない限り、javaが提供するapiを正直に実用することをお勧めします.:arrow: .
次に、最も簡単なファイルの読み取りを見てみましょう.
次のファイルの内容は、ローカルのF:Workpropertiesに保存されます.
jdbc.driverClassName=oracle.jdbc.driver.OracleDriver
jdbc.url=jdbc:oracle:thin:@127.0.0.1:1521:oracle
jdbc.username=test
jdbc.password=test
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Properties;

public class UtilProperties
{

public static void main(String[] args)
{

File file = new File("F:\\Work\\properties\\db.properties");

FileInputStream fi = null;

try
{
fi = new FileInputStream(file);
} catch (FileNotFoundException e)
{
e.printStackTrace();
}

Properties p = new Properties();

try
{
p.load(fi);
} catch (IOException e)
{
e.printStackTrace();
}

p.list(System.out);

}
}

運転結果出力は以下の通りです.(このメソッドは一般的にデバッグに使用されます)
-- listing properties --
jdbc.url=jdbc:oracle:thin:@127.0.0.1:1521:oracle
jdbc.username=test
jdbc.password=test
jdbc.driverClassName=oracle.jdbc.driver.OracleDriver

次のような出力が必要です
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Enumeration;
import java.util.Properties;

public class UtilProperties
{

public static void main(String[] args)
{

File file = new File("F:\\Work\\properties\\db.properties");

FileInputStream fi = null;

try
{
fi = new FileInputStream(file);
} catch (FileNotFoundException e)
{
e.printStackTrace();
}

Properties p = new Properties();

try
{
p.load(fi);
} catch (IOException e)
{
e.printStackTrace();
}

Enumeration e = p.propertyNames();

while(e.hasMoreElements())
{
Object obj = e.nextElement();
System.out.println(obj+"="+p.getProperty((String) obj));
}

}
}

結果は次のとおりです.
jdbc.url=jdbc:oracle:thin:@127.0.0.1:1521:oracle
jdbc.username=test
jdbc.password=test
jdbc.driverClassName=oracle.jdbc.driver.OracleDriver

出力が逆に1行足りないことに気づきましたが、私たちの出力コードの書き方を見てみましょう.もし私たちが出力する必要がなく、彼をセットしてオブジェクトの属性に入れることができたら、私たちはこの方法でファイルの記録を得ることができて、それから入庫してもいいです.簡単ではありませんが、私たちはこのようにするだけでは足りないことに気づきます.多くの人が質問しますが、このクラスにはこの役割しかありませんか?焦らないでください.次に、[b]xmlファイル解析[/b]という比較的一般的な方法に入ります.
xmlファイルは今回、私たちのプロジェクトパスの下に保存されましたD:WorkspaceTESTFOROJ
ファイルの内容は次のとおりです.



jdbc:oracle:thin:@127.0.0.1:1521:oracle
test
test
oracle.jdbc.driver.OracleDriver


解析するコードは次のコードになります.
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Enumeration;
import java.util.InvalidPropertiesFormatException;
import java.util.Properties;

public class UtilProperties
{

public static void main(String[] args)
{

File file = new File("D:\\Workspace\\TESTFOROJ\\db.xml");

FileInputStream fi = null;

try
{
fi = new FileInputStream(file);
} catch (FileNotFoundException e)
{
e.printStackTrace();
}

Properties p = new Properties();

try
{
p.loadFromXML(fi);
} catch (InvalidPropertiesFormatException e1)
{
e1.printStackTrace();
} catch (IOException e1) {
e1.printStackTrace();
}

@SuppressWarnings("unchecked")
Enumeration e = (Enumeration) p.propertyNames();

while (e.hasMoreElements())
{
Object obj = e.nextElement();
System.out.println(obj + "=" + p.getProperty((String) obj));
}

}
}
の出力結果は次のとおりです.
jdbc.url=jdbc:oracle:thin:@127.0.0.1:1521:oracle
jdbc.username=test
jdbc.password=test
jdbc.driverClassName=oracle.jdbc.driver.OracleDriver

以上、xmlファイルの読み込み方法を例に挙げましたが、D実は[b]xmlファイルの保存[/b]もできます.
私たちはやはり以上のファイルを例にして、コードは以下の通りです.
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.PrintStream;
import java.util.Enumeration;
import java.util.InvalidPropertiesFormatException;
import java.util.Properties;

public class UtilProperties
{

private static void getXML(Properties p,String fileName)
{
File file = new File(fileName);

FileInputStream fi = null;

try
{
fi = new FileInputStream(file);
} catch (FileNotFoundException e)
{
e.printStackTrace();
}

try
{
p.loadFromXML(fi);
} catch (InvalidPropertiesFormatException e1)
{
e1.printStackTrace();
} catch (IOException e1) {
e1.printStackTrace();
}

@SuppressWarnings("unchecked")
Enumeration e = (Enumeration) p.propertyNames();

while (e.hasMoreElements())
{
Object obj = e.nextElement();
System.out.println(obj + "=" + p.getProperty((String) obj));
}
}

public static void main(String[] args)
{

Properties p = new Properties();

//
getXML(p,"D:\\Workspace\\TESTFOROJ\\db.xml");
// , xml

p.setProperty("jdbc.username", "OOOOOOXXXXXXXX");

PrintStream ps = null;
String fileName = "D:\\Workspace\\TESTFOROJ\\db_bak.xml";

try {
ps = new PrintStream(new File(fileName));
} catch (FileNotFoundException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}

try {
p.storeToXML(ps, "this is print xml,just for test");
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}

//
getXML(p,fileName);

}
}

次は出力結果です.
jdbc.url=jdbc:oracle:thin:@127.0.0.1:1521:oracle
jdbc.username=test
jdbc.password=test
jdbc.driverClassName=oracle.jdbc.driver.OracleDriver
jdbc.url=jdbc:oracle:thin:@127.0.0.1:1521:oracle
jdbc.username=OOOOOOXXXXXXXX
jdbc.password=test
jdbc.driverClassName=oracle.jdbc.driver.OracleDriver

注意して、このような私が触れていない多くの、いくつかの高級な属性は、後でゆっくりと研究して、この文章はただ忘れて、もし友达が見たら、間違っていると思うところがあれば、どうぞ提出してください.注意して、コードの中にはいくつかの後続の仕事が処理されていません.例えば、ストリームの閉鎖、私はしていません.皆さん、注意してください.
以下にload法の解釈を示す.
Open Declaration void java.util.Properties.load(InputStream inStream) throws IOException


Reads a property list (key and element pairs) from the input byte stream. The input stream is in a simple line-oriented format as specified in load(Reader) and is assumed to use the ISO 8859-1 character encoding; that is each byte is one Latin1 character. Characters not in Latin1, and certain special characters, are represented in keys and elements using Unicode escapes.

The specified stream remains open after this method returns