2009年3月19日木曜日

for-each

java5以降
 for( 型 変数名: コレクション)
 コレクション: 配列、iteratableを実装したコレクションクラス
[例]
for(String str: arrStr)
for(Iterator: xxx.iterator())

コンソールエンコード

実行時のEncoding
実行の構成-共通-コンソール・エンコードで指定

文字ストリーム

Reader、Writer(抽象クラス)
 BufferedReader、BufferdWriter
 InputStreamReader、OutputStreamWriter
  FileReader、FileWriter

バッファリングなしでファイルからの入力
 FileReader
  ファイル名、Fileオブジェクトから作成
バッファリングありでファイルからの入力
 FileReader→BufferedReader
  Readerオブジェクトから作成
  行単位でread可能(改行コード line.separatorプロパティの定義)
サービス機能つきでファイルからの入力
 FileInputStream→InputStreamReader(→BufferedReader)
  InputStreamオブジェクトから作成
  エンコード指定可能(Charsetオブジェクトで指定)
 Scanner(Java5以降)
  FileオブジェクトやInputStream、Readableオブジェクトから作成
  構文解析が可能

バッファリングなしでファイルへの出力
 FileWriter
  ファイル名、Fileオブジェクトから作成
バッファリングありでファイルへの出力
 FileWriter→BufferedWriter
  Writerオブジェクトから作成
  newLineメソッドでシステム依存の改行出力可能(line.separatorプロパティの定義) 
サービス機能つきでファイルへの出力
 FileOutputStream→OutputStreamWriter(→BufferedWriter)
  OutputStreamから作成
  エンコード指定可能
 PrintWriter
  OutputStream、Writerオブジェクトから作成
  print、printf、printlnメソッドあり
  printlnメソッドでシステム依存の改行出力可能(line.separatorプロパティの定義) 
  プリミティブ型をフォーマットして出力可能
  

2009年3月6日金曜日

java.io.Fileクラス

  • カレントディレクトリの取得
    new File(".").getAbsoluteFile().getParent()
    getParent:パス名文字列を取得
    getParentFIle:Fileオブジェクトを取得
  • コンストラクタ
    File(File parent, String child)
    親抽象パス名および子パス名文字列から新しい File のインスタンスを生成します。
    File(String pathname)
    指定されたパス名文字列を抽象パス名に変換して、新しい File のインスタンスを生成します。
    File(String parent, String child)
    親パス名文字列および子パス名文字列から新しい File のインスタンスを生成します。
    File(URI uri)
    指定された file: URI を抽象パス名に変換して、新しい File のインスタンスを生成します。

2009年2月5日木曜日

入出力(Stream、Reader、Writer)

StreamReader/Writer
  • 用途によって、さまざまなクラスが存在する
  • 基本的なクラスを順に特化したクラスに渡していく感じ
    System.in→InputStreamReader→BufferdReader
    File→FileReader
    File→FileOutputStream→DataOutputStream
    File→FileInputStream→BufferedInputStream→DataInputStream
  • どのような用途でどのクラスを使うのかはまだよくわからない
    ※コンストラクタによる違い
     FileInput/OutputStream: ファイル名(String)かFileオブジェクトから作成可能
     DataInput/OutputStream: Input/OutputStreamから作成可能
     BufferdInput/OutputStream: Input/OutputStreamから作成可能
     →ファイル名(String)かFileオブジェクトからFileInput/OutputStreamを作成
      →FileInput/OutputStreamからBufferdInput/OutputStreamを作成
        ※バッファリングが必要な場合のみ
       →BufferdInput/OutputStreamからDataInput/OutputStreamを作成
  • BufferなしReader
    1文字づつのreadではintで受ける
    データ終了は-1、内部データは16bit Unicode
    取得文字表示時はcharにキャスト

2009年1月29日木曜日

符号付き整数の型変換

bytes→int

  • 符号付きで格納(-128~127)
    そのまま代入する

  • 0~255として変換
    0x000000FFとbitAND演算する

Stringとバイト配列


  • バイト配列から文字セットを指定して文字列を作成
    public String(byte[] bytes, String charsetName)
    String s = new String(bs, "US_ASCII");
    ※マルチバイト文字列の場合作成されたStringは内部形式(Unicode?)
     EUC-JP形式のbyte配列から作成した文字列
     Windows-31J形式nobytes配列から作成した文字列
     両者は同じStringとなる

  • 文字列から文字セットを指定してバイト配列作成
    String s = "ABC";
    bytes[] bs = s.getBytes("US-ASCII");

NumberFormatクラス

数値のフォーマット処理
DecimalFormatを利用するパターン
NumberFormat nf = new DecimalFormat("000");
String s = nf.format(99);

2009年1月22日木曜日

数値の変換


  • Doubleラッパークラス
    doubleToLongBits(double)
     //IEEE 754 浮動小数点のビットレイアウトに従ったlong値
    valueOf(string)
     //構文解析し、Doubleオブジェクトを返す
    parseLong(string)
     //構文解析し、double値を返す

  • Longラッパークラス
    longValue()
     //Longオブジェクト の値を long として返す
    toBinaryString(Long)
     //基数 2 の符号なし整数として返す
    valueOf(string,int)
     //2 番目の引数で指定された基数を使用した構文解析し、Longオブジェクトを返す
    parseLong(string,int)
     //2 番目の引数で指定された基数を使用した構文解析し、long値を返す

符号付整数での負数の表現


  • 2の補数をとる
    正数の全bit反転して+1する

  • 減算の計算
    負数を加算している(最上位の桁上がりは破棄)