よく、アプリケーションを使っていると、ファイルが他のプログラムで
変更されたことを検地する機能を持ったものがある。
これは、どうやってやっているんだろうかとぼんやりと思っていたのだけど、
必要に迫られることがなかったので、ずっと放置していたのだけども、
最近、ツールが作りたくなってこの機能があればスマートに実装できるので
ちょっと調べてみた。
すると、Delphiには、まさにそのためのコンポーネントがあるではないか。
それは、TShellChangeNotifierというクラス。
このクラスは、指定したフォルダ以下のファイルに変化があったら反応してくれる
コンポーネント。
下記が今回参考にしたサイトです。
http://www.geocities.jp/fjtkt/problems/2005_0008.html
2009年10月24日土曜日
2009年10月8日木曜日
シリアライズのテストプログラム
シリアライズをして復元するというようなプログラムをテストで
作ってみました。
いままではフレームワークで勝手にシリアライズしてくれるような部分で意識していなかった
部分だったのだけど、ちょっと自前で書いてみました。
Serializable なクラスをもつSerializable を作って
byte[]に格納した後に、そこからオブジェクトに復元してみる
というのを確かめたサンプルのソースコードです。
作ってみました。
いままではフレームワークで勝手にシリアライズしてくれるような部分で意識していなかった
部分だったのだけど、ちょっと自前で書いてみました。
Serializable なクラスをもつSerializable を作って
byte[]に格納した後に、そこからオブジェクトに復元してみる
というのを確かめたサンプルのソースコードです。
package SerializeTest;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import javax.xml.parsers.DocumentBuilder;
import org.w3c.dom.Document;
public class Main {
/**
* @param args
* @throws IOException
* @throws ClassNotFoundException
*/
public static void main(String[] args) throws IOException, ClassNotFoundException {
classA test = new classA();
// DocumentBuilder docbu = DocumentBuilder.get;
test.setLoginInfo(new LoginInfo("useree","passhhh"));
test.setVal1("かきくけこ");
test.setVal2("あいうえお");
System.out.println(test.toString());
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ObjectOutputStream p = new ObjectOutputStream(baos);
p.writeObject(test);
p.writeObject("String");
p.flush();
byte [] bit = baos.toByteArray();
baos.close();
//
ByteArrayInputStream bais = new ByteArrayInputStream(bit);
ObjectInputStream ois = new ObjectInputStream(bais);
classA cla = (classA ) ois.readObject();
String str = (String ) ois.readObject();
System.out.println(cla.toString());
System.out.println(str);
}
}
============================
package SerializeTest;
import java.io.Serializable;
public class classA implements Serializable {
/**
*
*/
private static final long serialVersionUID = -345225844394172659L;
LoginInfo loginInfo;
String val1 ;
String val2 ;
public LoginInfo getLoginInfo() {
return loginInfo;
}
public void setLoginInfo(LoginInfo loginInfo) {
this.loginInfo = loginInfo;
}
public String getVal1() {
return val1;
}
public void setVal1(String val1) {
this.val1 = val1;
}
public String getVal2() {
return val2;
}
public void setVal2(String val2) {
this.val2 = val2;
}
public String toString(){
return loginInfo.getUserName()
+"/"+loginInfo.getPassword()
+"/"+val1+"/"+val2;
}
}
===============================
package SerializeTest;
import java.io.Serializable;
public class LoginInfo implements Serializable {
/**
*
*/
private static final long serialVersionUID = -8712859729005134670L;
private String userName;
private String password;
public LoginInfo(String string, String string2) {
userName =string;
password=string2;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
登録:
コメント (Atom)
-
AutoItとは、何かというと、人の入力なしにどんどんアプリケーションを 進めていくための仕組みといったところでしょうか。 といっても、かなり高度で、ほとんど開発言語と言ってもいいように思う。 今回は、AutoItで画面操作を記録する方法について書いて見ます。 AutoItのダウ...
-
AutoItでコンポーネントをクリックする命令を送る方法 仕様リンク: http://www.autoitscript.com/autoit3/docs/functions/ControlClick.htm AutitV3 WindowInfoのControlのAdv...
-
Javaでデータ圧縮するのとそれを解凍するサンプルを書いて見た。 最初は、単純に Deflaterのみを利用するパターン import java.io.ByteArrayOutputStream; import java.util.zip.DataFormatExcepti...