Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

0

エクストリーム

import java.io.*;

 class ExIO2 {
  public static void main(String[] args) {
    try {  //(1)
      //(2)FileInputStreamオブジェクトの生成
      FileInputStream testin = new FileInputStream("C:\\javasample\
\javaUTF8\\src\\testin.txt");
      //(3)FileOutputStreamオブジェクトの生成
      FileOutputStream testout = new FileOutputStream("C:\
\javasample\\javaUTF8\\src\\testout.txt");
      //(4)InputStreamReaderオブジェクトの生成
      InputStreamReader in =
        new InputStreamReader(testin, "UTF8");
      //(5)OutputStreamWriterオブジェクトの生成
      OutputStreamWriter out =
        new OutputStreamWriter(testout, "UTF8");

      int contents;  //(6)

      //(7)読み込むデータがなくなるまで読み込み
      while ((contents = in.read()) != -1) {
        //(8)書き込むデータがなくなるまで書き込み
        out.write(contents);
      }
      in.close();  //(9)読み込みストリームを閉じる
      out.close();  //(10)書き込みストリームを閉じる
    } catch(IOException e) {
    }
  }
}
上記のようにUTF8のテキストデータを入出力をしてる間に、
フィールドごとにプログラム開発が出来るように勉強して
いきたいと思ってます。
今まではVBAで、プロシージャを分けて
各フィールドの入力データをPublicからワークスペースで定義して
ファンクションごとに郵便番号・住所・氏名ごとに
プログラム開発をしていたのですが、
今後勉強も兼ねてjavaでプログラム開発していきたいと思ってます。
今、色々勉強している最中ですがフィールドごとにプログラム開発していく
にはどのあたりを重点的に理解していけばよろしいでしょうか??
アドバイスよろしくお願いいたします。

6

回答

81782

閲覧

6件の回答

評価

0

「フィールド」って何?
状況によっていろいろ考えられるものには、それなりの説明を要する。

多人数による開発は、まずはクラス分割だね。
単一のソースでも、バージョン管理ツールでこまめに同期することも考えられる。

評価

0

アドバイスどうもありがとうございます。
フィールドとは、セル上で開いた場合
A列(Aフィールド)B列(Bフィールド)のような認識です。
なぜVBAではなくJAVAでの環境を取り入れたかというと
UTF8のテキスト入出力がADODBストリームしか
見当たらなくこの関数ですと、100万件ぐらいの件数ですと
機能しなくなります。
ですのでBufferedReaderで、1行ずつ読み込んで書き込む
環境を探してました。
環境はエクリプスで行っているのですが
親クラスに子クラスをどう設定すればいいか
概念が分からないのでこれから勉強してみます。
また具体的な質問が出来るようになりましたら
どうぞよろしくお願いいたします。
因みに氏名と題名が間違って記載してしまい
題名が無題になってしまったことをご了承願います。

評価

0

CSVかTSVか固定長か知らないけど、ファイルがグリッド扱いだってことね。
.txtだとそういう類推がしづらいので、業務的に変更できなかったりするなら、その
辺りの補足をした上で書き込むといい。

>親クラスに子クラスをどう設定すればいいか
という書き方からして、オブジェクト指向そのものがこれからか。
質問は恥ずかしいものじゃないし、禁じられてるわけでもない。
丸投げが好まれないだけで、ここまで勉強してここまで調べたけど、これがどうも
分からなくて…って感じのものならコメントも得やすい。

評価

0

本来はCSVでも構わないのですが
テキストエディタでチェックすることが多いので
テキスト形式で生成してます。
今後は固定長でも開発できればと思っているのですが・・・
今はテキストデータの事しか考えてません。

具体的な質問ではないと思いますが
ご相談させてください。
まず親クラスで下記のようなコードをセットしまして

import java.io.*;

 class ExIO2 {
  public static void main(String[] args) {
    try {  //(1)

    String str;
    
      //(2)FileInputStreamオブジェクトの生成
      FileInputStream testin = new FileInputStream
              ("C:\\javasample\\javaUTF8\\src\\testin.txt");
      //(3)FileOutputStreamオブジェクトの生成
      FileOutputStream testout = new FileOutputStream
              ("C:\\javasample\\javaUTF8\\src\\testout.txt");
      //(4)InputStreamReaderオブジェクトの生成
      InputStreamReader in =
        new InputStreamReader(testin, "UTF8");
      BufferedReader in_b =
                new BufferedReader(in);
    //(5)1行単位で読み込み

      //(6)OutputStreamWriterオブジェクトの生成
      OutputStreamWriter out =
        new OutputStreamWriter(testout, "UTF8");
      BufferedWriter out_b =
                new BufferedWriter(out);
      //(7)1行単位で書き込み


      //int contents;  //(6)

      //(8)読み込むデータがなくなるまで読み込み
     // while ((contents = in.read()) != -1) {
        //(9)書き込むデータがなくなるまで書き込み
        //out.write(contents);
     // }

      while((str = in_b.readLine()) != null) {
            out_b.write(str);
            out_b.newLine();
        }
      //(10)ストリーム終端null判定

      in_b.close();    //(11)バッファ読み込みを閉じる
      out_b.close(); //(12)バッファ書き込みを閉じる
      in.close();  //(13)読み込みストリームを閉じる
      out.close();  //(14)書き込みストリームを閉じる
    } catch(IOException e) {
    }
  }
}

例えば現在13列のテキストデータを
1行ずつ読み書きして、子クラスで開発をして継承できたらと思い
勉強しているのですが
下記のような子クラスのコードを
親クラスに継承したい場合
継承の仕方が分かりません。
イメージ的には
この13列のデータを元に
変数でフラッグを立てて個々に
フィールド(列)の抽出をしたり、
if文やスイッチ文を使い開発をしていきたいのです。
フィールドの設計としては
間違った方法に進んでないでしょうか??

独学で勉強して
まだビギナーですので
アドバイス頂けると助かります。
どうぞよろしくお願いいたします。

public class sub_1 extends ExIO2 {



    String[] array = new String[13];{


     array[0] = "基礎年金番号";
     array[1] = "年金コード";
     array[2] = "氏名カナ";
     array[3] = "氏名漢字";
     array[4] = "生年月日";
     array[5] = "郵便番号";
     array[6] = "住所カナ";
     array[7] = "住所漢字";
     array[8] = "住民票収録状況表示";
     array[9] = "住所突合結果コード";
     array[10] = "住民票住所漢字";
     array[11] = "抽出年月日";
     array[12] = "予備";

     for ( int i = 0; i < array.length; ++i ) {
            array[i] = "データ_" + i;
        }

    }

}

評価

0

基礎から固めないと後で苦労するばかりだよ。
ソースを見る限り、DBを扱うこと自体がまだ早い。

評価

0

アドバイスありがとうございます。
もう少し基礎からやっていこうと思います。
まず、配列やら制御文等で
System.out.printlnの実行結果から
少しずつ理解していくことにします。

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。