|
||||||||||||||||||||||
|
バイナリファイルの読み込みと書き込みここでは Java でバイナリファイルを扱ってみましょう。 テキストファイルについては、テキストファイルの読み込みと書き込み で既にみていますので、 そちらがまだの方はざっとみてからこちらに戻られると良いと思います。 DataInputStream と DataOutputStreamバイナリファイルの読込みと書き込みのサンプルとして、ここでは jpeg 画像をコピーするプログラムを書きましょう。
バイナリのデータの入出力のため、 DataInputStream (入力) と DataOutputStream (出力) を使います。 package com.keicode.java.test;
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 StreamTest6 {
public static void main(String[] args) {
try {
byte[] b = new byte[4096];
int readByte = 0, totalByte = 0;
// From test.jpg
DataInputStream dataInStream =
new DataInputStream(
new BufferedInputStream(
new FileInputStream("/home/keisukeo/tmp/test.jpg")));
// To copy.jpg
DataOutputStream dataOutStream =
new DataOutputStream(
new BufferedOutputStream(
new FileOutputStream("/home/keisukeo/tmp/copy.jpg")));
while(-1 != (readByte = dataInStream.read(b))){
dataOutStream.write(b, 0, readByte);
totalByte += readByte;
System.out.println("Read: " + readByte + " Total: " + totalByte);
}
dataInStream.close();
dataOutStream.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
ここでは4キロバイトのバッファを用意しておき、そこに DataInputStream を用いてデータを読み込みます。 読み込んだデータは DataOutputStream を使って出力します。
Zip ストリームによるファイルの圧縮とアーカイブストリームの良いところはなんといっても、それをネストすることによって、機能を付け足していけるところがあげられます。 ここまではせいぜいバッファリングするとか、そういう程度でしたが、ここではもう一歩便利なクラスをみてみましょう。ZipOutputStream によるファイルの圧縮とアーカイブです。 package com.keicode.java.test;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
public class StreamTest7 {
public static void main(String[] args) {
try {
String filePath = "/home/keisukeo/tmp/a.html";
String zipPath = "/home/keisukeo/tmp/a.zip";
// zip file
ZipOutputStream zipOutStream =
new ZipOutputStream(
new FileOutputStream(zipPath));
// zip entry
ZipEntry entry = new ZipEntry("a.html");
// original file
FileInputStream fileInStream = new FileInputStream(filePath);
zipOutStream.putNextEntry(entry);
for(int i = fileInStream.read();
i != -1;
i=fileInStream.read()){
zipOutStream.write(i);
}
fileInStream.close();
zipOutStream.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
この例ではテキストファイルを読み込み、ZipOutputStream に出力することによってファイルを圧縮しています。 |
|
© 2010 Java 入門 |
|||||||||||||||||||