1 package jp.co.areaweb.tools.csv;
\r
6 * <p>CSVファイルを操作する。<br/>
\r
7 * このクラスではCSVに対するファイル操作と、各行を束ねた単位で操作します。各行は、CsvRecordオブジェクトで管理します。<br/>
\r
8 * このクラスは通常,CsvRecordクラスとセットで利用します。</p>
\r
11 * <b>ファイルの読み出し例</b>:<br/>
\r
12 * CsvFile csv = new CsvFile("C:\\Program Files\\data\\フォルダ\\ファイル.csv");<br/>
\r
16 * <b>CSVレコードの追加と変更</b>:<br/>
\r
17 if (csvf.isEmpty()) {<br/>
\r
19 CsvRecord line = new CsvRecord();<br/>
\r
20 line.add("code");<br/>
\r
21 line.add("name");<br/>
\r
22 csvf.add(line);<br/>
\r
26 CsvRecord line = csvf.getFirst();<br/>
\r
27 line.set(1, "name");<br/>
\r
31 * <b>ファイルに保存</b>(上書き):<br/>
\r
36 * @version v2.17 2010/01/24
\r
37 * @see jp.co.areaweb.tools.csv.CsvRecord
\r
40 @SuppressWarnings("serial")
\r
41 public class CsvFile extends LinkedList<CsvRecord> {
\r
42 //String pathname; // 対象CSVファイルのパス名
\r
43 protected String charsetName = "Windows-31J";
\r
44 protected File file;
\r
45 protected LinkedList<CsvRecord> allRecords = new LinkedList<CsvRecord>(); // CSVファイル内の全データを保持するコレクション
\r
48 * pathnameで指定されたパス名のファイルを対象のCSVファイルとします.
\r
49 * @param pathname 対象のCSVファイルのパス名
\r
51 public CsvFile(String pathname) {
\r
52 this(new File(pathname));
\r
56 * fileで指定されたファイルを対象のCSVファイルとします.
\r
57 * @param file 対象のCSVファイル
\r
59 public CsvFile(File file) {
\r
64 * CVSファイルからデータを読みだします。
\r
66 public void load() throws Exception {
\r
71 * CVSファイルからデータを読みだします。
\r
74 public void load(int limit) throws Exception {
\r
76 LineNumberReader reader = new LineNumberReader(new InputStreamReader(new FileInputStream(this.file), this.charsetName));
\r
78 for (int i = 0; ((limit <= 0) || (i < limit)); i++) {
\r
79 if ((line = reader.readLine()) == null) {
\r
82 CsvRecord record = new CsvRecord();
\r
83 record.analizeRecord(line);
\r
90 * インポート元のキャラクタセットを設定する。
\r
91 * デフォルトは、「Windows31J」
\r
92 * @param charsetName 対象のCSVファイル内の文字コード
\r
94 public void setCharsetName(String charsetName) {
\r
95 this.charsetName = charsetName;
\r
99 * 現在設定されているCSVファイルの文字コードを取得する
\r
100 * @return 現在設定されている文字コードを取得する
\r
102 public String getCharsetName() {
\r
103 return this.charsetName;
\r
110 public File getFile() {
\r
118 public void setFile(File file) {
\r
123 * index番目の項目がdataStrになっているレコードを読み出す。
\r
124 * @param index 検索対象とする列番号(0~)
\r
125 * @param dataStr 検索値
\r
126 * @return 条件に合致したレコード(複数)
\r
128 public CsvFile find(int index, String dataStr) {
\r
129 CsvFile result = new CsvFile(this.file);
\r
130 for (Iterator<CsvRecord> i = this.iterator(); i.hasNext(); ) {
\r
131 CsvRecord record = (CsvRecord)i.next();
\r
132 String data = (String)record.get(index);
\r
133 if (data.equals(dataStr)) {
\r
134 result.add(record);
\r
141 * データ内容をファイルに書き戻す。<br>
\r
143 * @throws IOException ファイルへの書き出しに失敗した。
\r
145 public void save() throws IOException {
\r
150 * データ内容をファイルに書き戻す。<br>
\r
151 * @throws IOException ファイルへの書き出しに失敗した。
\r
153 public void save(File outputFile) throws IOException {
\r
154 FileOutputStream fo = new FileOutputStream(outputFile);
\r
155 PrintStream ps = new PrintStream(fo);
\r
156 for (Iterator<CsvRecord> i = this.iterator(); i.hasNext(); ) {
\r
157 CsvRecord record = (CsvRecord)i.next();
\r
158 ps.println(record.toString());
\r