山傘のプログラミング勉強日記

プログラミングに関する日記とどうでもよい雑記からなるブログです。

スッキリわかるJava入門 実践編 第10章 ファイルの操作

第10章 ファイルの操作

代表的なデータフォーマットとその操作を学びます。

CSVファイル形式

CSVファイル形式は複数のデータをカンマで区切って順番に格納するデータフォーマットで広く使われています。

StringTokenizer
import java.util.StringTokenizer;

public class Main {
    public static void main(String[] args) {
        String s = "ミナト,アサカ,スガワラ";
        // カンマをデリミタ指定
        // デリミタ: 区切り文字
        /*StringTokenizerは、互換性を維持する目的で保持されているレガシー・クラスであり、
        * 新規コードでは使用が推奨されていません。この機能の使用を考えているなら、
        * Stringのsplitメソッドまたはjava.util.regexパッケージを代わりに使用することを
        * お薦めします。
        */
        StringTokenizer st = new StringTokenizer(s, ",");
        while(st.hasMoreTokens()) {
            String t = st.nextToken();
            System.out.println(t);
        }
    }
}

プロパティファイル形式

プロパティファイル形式はデータをキーと値のペアで格納する。

主なルールとして、

  • データは文字情報として保存する

  • キーと値で記述する などがあります。

プロパティファイルの記述形式と格納先(hptl_clb_csc.properties)

XML形式

XML形式はタグを用いてデータに親子関係の構造を持たせます。

HTMLみたいなものでしょうか。

XMLファイルを読み込む
import java.io.FileInputStream;
import java.io.InputStream;

import javax.xml.parsers.DocumentBuilderFactory;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

public class Main {
    public static void main(String[] args) throws Exception{
        InputStream is = new FileInputStream("rpgsave.xml");
        Document doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(is);
        Element hero = (Element) doc.getDocumentElement();
        Element weapon = findChildByTag(hero, "weapon");
        Element power = findChildByTag(weapon, "power");
        String value =  power.getTextContent();
        System.out.println(value);
    }
    static Element findChildByTag(Element self, String name) throws Exception {
        NodeList children = ((Node) self).getChildNodes();
        for(int i = 0; i < children.getLength(); i++) {
            if(children.item(i) instanceof Element) {
                Element e = (Element) children.item(i);
                if(e.getTagName().equals(name)) {
                    return e;
                }
            }
        }
        return null;
    }
}
<?xml version='1.0' encoding='utf-8'?>
<hero>
 <name>ミナト</name>
 <hp>75</hp>
 <mp>18</mp>
 <weapon>
  <name>bbb</name>
  <power>7</power>
 </weapon>
</hero>

文字コードに注意します。

スッキリわかる Java入門 実践編 第2版 (スッキリシリーズ)

スッキリわかる Java入門 実践編 第2版 (スッキリシリーズ)