[[雑記帳]]
ObjectOutuptStream out = null;
try {
out = new ObjectOutputStream(new FileOutputStream("foo.ser"));
out.writeObject(foo);
} catch (FileNotFoundException e) {
handleError(e);
} catch (IOException e) {
handleError(e);
} finally {
try {
if (out != null) {
out.flush();
out.close();
}
} catch (IOException e) {
}
}
デシリアライゼーション(復元)
Foo foo = null;
ObjectInputStream in = null;
try {
in = new ObjectInputStream(new FileOutputStream("foo.ser"));
foo = (Foo)in.readObject();
} catch (FileNotFoundException e) {
handleError(e);
} catch (OptionalDataException e) {
handleError(e);
} catch (ClassNotFoundException e) {
handleError(e);
} catch (IOException e) {
handleError(e);
} finally {
try {
if (in != null) {
in.close();
}
} catch (IOException e) {
}
}
ObjectWriterとReaderの拡張
"T.Ikura" <ikura@nagoya.iij.ad.jp> writes:
> fout = new FileOutputStream(filename, true);
> oout = new NonHeaderObjectOutputStream(fout);
> で何回か書き込んで
> oin = new NonHeaderObjectInputStream(fin);
> で無事全て読み込めました。
なるほど、ObjectInputStreamの方もheaderを読まないようにしたのですか。
こちらの意図としては、
・最初の一回は普通のObjectOutputStreamでwriteObjectして、
・appendするときはNonHeaderObjectOutputStreamでwriteObjectして、
・読むときは普通のObjectInputStreamでreadObjectする。
というものでした。
headerなしでも動いてしまうのですね。headerはmagic番号とversion番号の
チェックをしているだけなのですね。取ってしまってもいいといえばいいかも
しれないですが、他のアプリケーションと組み合わせる可能性を考えると、
上のようにheaderを付けるようにした方がいいかも。
「最初の一回」かどうかで場合分けするのがあれでしたら、「ファイルを作る」
という操作で、
new ObjectOutputStream(new FileOutputStream(filename)).close();
として、headerだけのファイルを作り、
「オブジェクトを追加書き出しする」という操作で、
ObjectOutput oo = new NonHeaderObjectOutputStream(
new FileOutputStream(filename, true)
);
oo.writeObject(...
とすればよいのではないかと。
String dirname="."+File.separator+"savedat";
load.removeAllItems();
File dir=new File(dirname);
String[] filelist=dir.list();
// Pattern datpattern =Pattern.compile("sam",Pattern.CASE_INSENSITIVE);
for(int i=0;i<filelist.length;i++){
// Matcher m=datpattern.matcher(filelist[i]);
// if(m.matches())System.out.println(filelist[i]);
if(Pattern.matches(".*\\.dat$",filelist[i])){
// System.out.println(filelist[i]);
// Pattern fileP=Pattern.compile(".");
// String[] file=fileP.split(filelist[i]);
load.addItem(filelist[i]);
}