質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

2回答

20046閲覧

【Java】設定ファイル(propertiesやini)の値をキー指定で書き換える

javabigineer

総合スコア87

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2016/06/01 04:57

Java言語で、設定ファイルを書き換える処理を作成したいです。
本来設定ファイルはキー指定で値(value)を取得するという使い方をすると思うのですが、
キー指定で値(value)を書き換えることはできるのでしょうか?


key=contents

key=contents2

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

プロパティファイル読み書き用ユーティリティとして、Commons Configuration があります。

こちらの http://commons.apache.org/proper/commons-configuration/userguide/quick_start.html クイックスタートで利用方法が簡単に紹介されています。
なおバージョン1と2がありますが、今回わたしの方で検証した2.0ではcommons-beanutilsも必要です。beanutilsのバージョンは1.9.2です。

読み込みの例:

java

1import org.apache.commons.configuration2.Configuration; 2import org.apache.commons.configuration2.PropertiesConfiguration; 3import org.apache.commons.configuration2.builder.FileBasedConfigurationBuilder; 4import org.apache.commons.configuration2.builder.fluent.Configurations; 5 6....... 7 8public void load(String propertiesFile) throws Exception { 9 Configurations configs = new Configurations(); 10 Configuration config = configs.properties(propertiesFile); 11 12 String key1 = config.getString("key1"); 13 System.out.println(key1); 14}

上書き保存の例:

java

1ublic void save(String propertiesFile) throws Exception { 2 Configurations configs = new Configurations(); 3 FileBasedConfigurationBuilder<PropertiesConfiguration> builder = 4 configs.propertiesBuilder(propertiesFile); 5 PropertiesConfiguration config = builder.getConfiguration(); 6 config.setProperty("key4", "value4"); 7 builder.save(); 8}

上書き保存の処理では、もともとあったコメントなども残ります。

投稿2016/06/01 12:42

A-pZ

総合スコア12011

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

javabigineer

2016/06/02 02:04

iniファイルでも使用可能でしょうか?
javabigineer

2016/06/02 04:33

下記エラーが出たのですが、ライブラリ不足しているのでしょうか? Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/logging/Log at org.apache.commons.configuration2.io.FileSystem.<clinit>(FileSystem.java:37) at org.apache.commons.configuration2.io.FileLocatorUtils.<clinit>(FileLocatorUtils.java:54) at org.apache.commons.configuration2.io.FileHandler.emptyFileLocator(FileHandler.java:1516) at org.apache.commons.configuration2.io.FileHandler.<init>(FileHandler.java:188) at org.apache.commons.configuration2.io.FileHandler.<init>(FileHandler.java:177) at org.apache.commons.configuration2.builder.FileBasedBuilderParametersImpl.<init>(FileBasedBuilderParametersImpl.java:92) at org.apache.commons.configuration2.builder.FileBasedBuilderParametersImpl.<init>(FileBasedBuilderParametersImpl.java:80) at org.apache.commons.configuration2.builder.fluent.Parameters.fileBased(Parameters.java:185) at org.apache.commons.configuration2.builder.fluent.Configurations.fileParams(Configurations.java:602) at org.apache.commons.configuration2.builder.fluent.Configurations.fileParams(Configurations.java:638) at org.apache.commons.configuration2.builder.fluent.Configurations.fileBasedBuilder(Configurations.java:164) at org.apache.commons.configuration2.builder.fluent.Configurations.propertiesBuilder(Configurations.java:264) at MakeInstall.PropertiesHandler.save(PropertiesHandler.java:70) at MakeInstall.makeInstall.main(makeInstall.java:128)
A-pZ

2016/06/02 04:43

ですね、commons-loggingも追加してください。
javabigineer

2016/06/02 05:34

上記エラーは解決しました。ライブラリが不足していたのでビルドしました。 一点追加で質問です。 文字コードは設定できないのでしょうか?文字化けしてしまいます。。
退会済みユーザー

退会済みユーザー

2016/06/13 18:14

setDefaultEncodingを使えば解決できるかもです。 Configurations configs = new Configurations(); FileBasedConfigurationBuilder<PropertiesConfiguration> builder = configs.propertiesBuilder(propertiesFile); PropertiesConfiguration config = builder.getConfiguration(); config.setProperty("key4", "value4"); FileBasedConfigurationBuilder.setDefaultEncoding(config.getClass(), "UTF-8"); //追加 builder.save();
javabigineer

2016/06/14 07:47

文字化けしていると思いましたが、設定ファイルを読み込んだら正常に読み込めていました。クローズいたします。
guest

0

propertiesファイルの読み込みにはPropertiesクラスを利用されていると思いますが、インスタンスにセットされた値をアウトプットするメソッド(store)はあります。
storeの機能で十分ならば、アウトプットする前にsetPropertiesを利用して書き換えてあげればおっけーです。
例を書いてみました(動作確認してないです)

java

1// インスタンス 2Properties properties = new Properties(); 3// 読み込み 4InputStreamReader in = new InputStreamReader(new FileInputStream("読み込み元"), "utf-8") 5properties.load(in); 6// セット 7properties.setProperty("key", "content2"); 8// 書き出し 9FileOutputStream out = new FileOutputStream("保存先"); 10properties.store(out, "任意のコメント");

コメントが維持できない等、融通が効かない為、きっちりやりたいのであれば、自分で書きだすロジック書いた方がいいかもしれないですね。
だいたいどんな事が出来るか参考にできるページがありましたので、掲載します。

-参考-
http://blogs.yahoo.co.jp/dk521123/32137862.html

投稿2016/06/01 05:19

編集2016/06/01 05:22
SeventhBell

総合スコア14

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問