2009年6月10日水曜日

Java DataInputStreamクラス、DataOutputStreamクラスを使用してバイナリファイルの読み書きを行う

DataInputStreamクラス、DataOutputStreamクラスを使用してバイナリファイルの読み書きを行います。

DataInputStreamはint型やboolean型といったプリミティブ型およびString型の値としてバイナリファイルのバイトデータを読み込みます。

boolean readBoolean()
1 バイトの入力データを読み込んで、そのバイトがゼロ以外の場合は true、そのバイトがゼロの場合は false を返します。
byte readByte()
1 バイトの入力データを読み込んで返します。
char readChar()
入力データの char を読み込んで、char 値を返します。
double readDouble()
8 バイトの入力データを読み込んで、double 値を返します。
float readFloat()
4 バイトの入力データを読み込んで、float 値を返します。
void readFully(byte[] b)
入力ストリームから数バイトを読み込み、それをバッファー配列 b に格納します。
void readFully(byte[] b, int off, int len)
入力ストリームから len バイトを読み込みます。
int readInt()
4 バイトの入力データを読み込んで、int 値を返します。
String readLine()
入力ストリームから、次の行のテキストを読み込みます。
long readLong()
8 バイトの入力データを読み込んで、long 値を返します。
short readShort()
2 バイトの入力データを読み込んで、short 値を返します。
int readUnsignedByte()
1 バイトの入力データを読み込んで、int 型にゼロ拡張して結果を返します。
int readUnsignedShort()
2 バイトの入力データを読み込んで、0 0 65535 の範囲の int 値を返します。
String readUTF()
修正 UTF-8 形式でエンコードされた文字列を読み込みます。





DataOutputStreamクラスも同じくint型やboolean型といったプリミティブ型およびString型の値をバイナリファイルのバイトデータとして書き込みます。

void write(byte[] b)
出力ストリームに配列 b のすべてのバイトを書き込みます。
void write(byte[] b, int off, int len)
配列 b から len バイトを順番に出力ストリームに書き込みます。
void write(int b)
引数 b の下位 8 ビットを出力ストリームに書き込みます。
void writeBoolean(boolean v)
1 つの boolean 値を出力ストリームに書き込みます。
void writeByte(int v)
引数 v の下位 8 ビットを出力ストリームに書き込みます。
void writeBytes(String s)
文字列を出力ストリームに書き込みます。
void writeChar(int v)
2 バイトから構成される char 値を出力ストリームに書き込みます。
void writeChars(String s)
文字列 s 内の各文字を、1 文字ごとに 2 バイトずつ出力ストリームに順番に書き込みます。
void writeDouble(double v)
8 バイトから構成される double 値を出力ストリームに書き込みます。
void writeFloat(float v)
4 バイトから構成される float 値を出力ストリームに書き込みます。
void writeInt(int v)
4 バイトから構成される int 値を出力ストリームに書き込みます。
void writeLong(long v)
8 バイトから構成される long 値を出力ストリームに書き込みます。
void writeShort(int v)
引数の値を表す 2 バイトを出力ストリームに書き込みます。
void writeUTF(String str)
長さ情報の 2 バイトを出力ストリームに書き込みます。


DataInputStreamクラスで読み取れるバイナリファイルはDataOutputStreamクラスを使用して作成したファイルだけです。
そのためアプリケーション独自で読み書きするバイナリファイルに限られます。

package FileAccess;

import java.awt.Button;
import java.awt.Frame;
import java.awt.Panel;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

public class BinaryFileSample03 extends Frame implements ActionListener{

private static final long serialVersionUID = 1L;

public static void main(String args[]){ 
new BinaryFileSample03();
}


Button btnWrite;
Button btnRead;

public BinaryFileSample03(){
this.setTitle("BinaryFileSample03");
this.setSize(300,100);

btnWrite = new Button("Write");
btnWrite.addActionListener(this);
btnRead = new Button("Read");
btnRead.addActionListener(this);
Panel p1 = new Panel();
p1.add(btnWrite);
p1.add(btnRead);
this.add(p1);

this.setVisible(true);
}

public void actionPerformed(ActionEvent arg0) {
if (arg0.getSource() == btnWrite){
write();
}else if (arg0.getSource() == btnRead){
read();
}
}

/*
* 書込み
*/
private void write(){
FileOutputStream fos = null;
BufferedOutputStream bos = null;
DataOutputStream dos = null;

try {
fos = new FileOutputStream("D:/BinaryFileSample03.txt");
bos = new BufferedOutputStream(fos);
dos = new DataOutputStream(bos);

dos.writeBoolean(false);
dos.writeInt(50);
dos.writeBoolean(true);
dos.writeUTF("文字列1");
dos.writeInt(100);
dos.writeUTF("文字列2");

dos.flush();

} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (dos != null){
dos.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}  
}

/*
* 読込み
*/
private void read(){
FileInputStream fis = null;
BufferedInputStream bis = null;
DataInputStream dis = null;

try {
fis = new FileInputStream("D:/BinaryFileSample03.txt");
bis = new BufferedInputStream(fis);
dis = new DataInputStream(bis);

boolean b1 = dis.readBoolean();
int i1 = dis.readInt();
boolean b2 = dis.readBoolean();
String s1 = dis.readUTF();
int i2 = dis.readInt(); 
String s2 = dis.readUTF();

System.out.println(b1);
System.out.println(b2);
System.out.println(i1);
System.out.println(i2);
System.out.println(s1);
System.out.println(s2);

} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (dis != null){
dis.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}

0 件のコメント: