【java】標準出力を闇に葬る(UNIXの> /dev/nullをjava内で再現)
UNIXでいう「標準出力を闇に葬る」のやりかた、すなわち↓
echo AAA > /dev/null
をjavaの中でだけ実現するやり方のメモ(Windows向け)
UNIXでいう「標準出力を闇に葬る」のやりかた、すなわち↓
echo AAA > /dev/null
をjavaの中でだけ実現するやり方のメモ(Windows向け)
XMLをXSLを通じてHTMLに変換するやり方のサンプル(javaソース)
WSDLをjavaソースにする方法。
ググれば出てくるが……
※前提としてaxis.jarが必要。(↓のURLから入手)
http://axis.apache.org/axis/ja/java/user-guide.html
DBからデータを取得する(SELECTして結果をResultSetで受け取る)のは比較的簡単なので、 受け取った結果をStringにしてしまえばあとはBufferedWriter使って出力するのはそれほど難しくはない。
ただ、DBのほうに改行が入っているような場合、 CSVやTSV等、テキストファイルにしてしまうとその項目で1行ずれてしまって、結果的に出力状態が不正になる。
DBのデータをそのまま別DBに移植する場合等、 区分値や数値だけで構成された簡単なテーブル構造であればCSVやTSVにしてSQLLoaderするのが手軽なのだが こういうデータに関してはいちいちexpやexpdpを使って(いわゆるバイナリファイルにして)取り扱わないと別DBへの移植がしづらいという難点がある。
これを、JDBCを使った接続方式によるデータ取得の結果としてSerializableを併用することで自前のexpdpを実現する方法をメモとして残す。
javaにはオブジェクトの内容をそのままファイルにして出力したり、そのファイルを読み込んでオブジェクトとして復帰させる方法が存在する。
Serializableというインターフェースを実装することでそれが可能になる。
ある目的のために少し勉強したことがあるので、簡単な実現方法と共にここにメモ書きを残す。
与えられた文字列をMD5でハッシュ値に変換する方法のメモ
勘違いしていたというか、内心ちょびっとだけ「そんなにうまくはいかないか」と思っていたら実際そうだったんだが、
java.util.Listは=で同じ型の別変数に移しても内容が維持されるらしい。
2つの異なる変数間で同じメモリの内容を共有するようになるというか。
例えば、List(変数名:list)で5つの要素を格納した後、
別のList(変数名:list2)にlistをそのまま移して、
list2側でremoveかけると、list2もlistも要素数が4になる(list2だけ5⇒4に減るわけではない)。
javaで時間を加算する実装例。
ストレイテナーのシミュレーションするときにテスト的にやったのでメモとして残す。
特に「時」(Hour)の部分がない文字列からDateFormatを通して時間に変換した後、別の時間と合計する場合は、
オフセットを適切な箇所に加算ないし減算してあげる必要がある。
これは、「時」の部分がない文字列のDateFormat#parseでは1970/01/01 00:00:00をもとに変換されたDateインスタンスを得るからである。
よって、基準となる1970/01/01 09:00:00からすると過去の日時であるため「負数」となり、
これを単純加算していくと負数+負数でどんどん小さくなり、結果的にわけのわからん時刻になる。
例えば47分2秒+14分58秒だが、当然だが「1時間2分0秒」という値がほしいのに対し、
オフセット加算をしないと「16時間2分」になる。
これは、
47分 2秒=1970/01/01 00:47:02=-29578000ミリ秒
14分58秒=1970/01/01 00:14:58=-31502000ミリ秒
で、合計すると-61080000ミリ秒となり、
1970/01/01 09:00:00からすると「過去の日時」を指すことになるので、
結果的に「1969/12/31 16:02:00」になる。
これをHH:mm:ssでパースして「16:02:00」、つまり「16時間2分」になってるように見えてしまうのだ。
全角文字を含む値(VALUE)を持つjavaのpropertiesファイルは、使用する環境を考慮してか得てしてnative2ascii化されていることが多い。
よって、メモ帳やらサクラエディタ等の、一般的なテキストエディタで開くとこんな感じに見えてしまう↓
test.key=\u30d5\u30a1\u30a4\u30eb\u306e\u51fa\u529b\u306b\u5931\u6557\u3057\u307e\u3057\u305f\u3002 #ちなみに"ファイルの出力に失敗しました"と書いてある
当然この状態だと何書いてあるかわからんので日本語にしたいのだが、
知っているかぎりエディタ上でこれを日本語で復元して読み込んでくれるのはEclipseしかなく、
いちいちこのpropertiesファイルのために重いEclipse立ち上げるのも億劫で
手軽なnative2asciiの復元方法や、エディタがあればいいなあと思っていた。
どうもコマンドプロンプト上でnative2asciiコマンドを使うのが最も手っ取り早そうなので、
ここでその使い方を記述する。