PictSplit2.6公開!

PictSplit2.6 (zipファイル)

更新内容は

  1. 移動元と標準移動先が同じ場合ファイルが移動されず削除されてしまう不具合を修正

1.5の時に修正した不具合が再発してしまうという最悪の事態です。

ご利用者の皆様には大変ご迷惑をおかけし誠に申し訳ございません。

そして「移動しなかった件数が合わない」という不具合も発見いたしました。実際の移動処理には影響が有りませんが、カウント部分がメタファイルと画像で1件ずつカウントされてしまうようです。

漫画として複数画像がひとつのフォルダに入っているものは正常にカウントできているようです。

ソースファイルが文字化けしており、一部メニューやステータス表示を変更いたしました。

コメント部分も文字化けおりましたので内部動作を追うのが難しくなり、今後の更新は難しくなりました。

オススメEclipse 日本語化「MergeDoc」

Eclipseの日本語化ではPleiadesプラグインが有名ですが、これだけではJava docまで日本語化出来ませんでした。

そこで登場するのがMargeDocです。

標準のJava docを日本語化するものです。分かりやすい使い方はこちら

MergeDocの使い方 – http://sourceforge.jp/projects/mergedoc/howto/usage

使い方のページ通り進めていけば大丈夫なんですが、私は文字化けしてしまいました!

その理由は簡単で、単純にEclipseのエンコードをUTF-8に変更していたからです。何で変えちゃったんだろうね?

もしEclipseのエンコードを変えている人は、手順6.出力ソースアーカイブディレクトリのエンコードをEclipseと同じものに変えればちゃんと日本語で表示されます。

投稿日:
カテゴリー: PC タグ:

MultithreadPasswordClear 公開!

各種設定を行うメイン画面

マルチスレッドを利用したJava言語のパスワード総当り解読プログラムを公開!

各種設定を行うメイン画面

DL – MultithreadPasswordClear.zip

バグの修正は終わりましたが、どうやっても現状の知識では既存のソフトウェア以上の解読速度を出せませんでした。

しかも、最初は検索するパスワードを全て生成してからチェック処理を行っていたため、桁が多くなるとパスワードの生成に時間がかかり、速度の低下を招くとともに、メモリの消費も激しくJavaVMの初期設定メモリ範囲をオーバーしてしまいました。

なのでパスワード生成と同時にチェック処理を行うようにした結果、桁数増大の心配はなくなりましたが、全体の処理にかかる時間は大幅に増加し、桁数が少ない場合において顕著な速度低下が起こりました。

以上の結果を踏まえ、今回はこのソフトウェアは公開を中止いたします。

Javaでdelete()しても消せない!

test.zip canExecute:true
test.zip canWrite:true
test.zip canRead:true
delete test.zip file:false

複数のスレッドで利用したあと削除しようと思ったんだけど何故か削除できない。

パスの指定は間違っていないし、書き込み・読み込みもできる。しかし削除が出来ないとはどういうことだい?

何か他に要因があるのだろうか。しかし今日は遅いのでもう寝る!明日がんばろう!

投稿日:
カテゴリー: PC タグ:

PictSplit 2.5 公開!

今回も更新推奨

PictSplit2.5(zipファイル)

更新内容は

  1. メタファイルが存在しない場合にエラー表示され、移動できているにも関わらず画像が削除される不具合を修正
  2. メタファイルによるタグ移動に対応

やっとメタファイルを使ったタグ移動に対応しました。これにより、自分でメタファイルを編集して振り分けるフォルダを変えることができるようになります。

きっちりと設計して組んでなかったのでソースコードが複雑に。

無駄な処理とかしてそうで、一からやり直せばもっと処理速度アップやメモリの節約ができそうです。

SQLJetを使う!テーブル内容取得編

やってまいりました、テーブル内容を取得する方法です

	public String[][] getTable(String tableName) throws SqlJetException{

		// テーブル内容格納変数
		String[][] table_ar = null;

		// 読み込みモード
		db.beginTransaction(SqlJetTransactionMode.READ_ONLY);

		// テーブル取得
		ISqlJetTable table = db.getTable(tableName);

		// テーブルオープン
		ISqlJetCursor cursor = table.open();

		// 項目名取得
		String[] columnNames = getColumnNames(tableName);

		// 配列の要素数確定
		table_ar = new String[(int)cursor.getRowCount()][columnNames.length];

		// カーソルが最後でなければ取得
		if(!cursor.eof()){

			// 列カウント、行カウント
			int c_count, r_count = 0;

			do{
				c_count = 0;

				// 列数分ループ
				for(String str : columnNames){

					table_ar[r_count][c_count] = cursor.getString(str);
					c_count++;

				}
				r_count++;

				// カーソルを次へ(行数分ループ)
			}while(cursor.next());
		}

		db.commit();

		return table_ar;
	}

dbはSqlJetDb型の変数です。最終的に全部のメソッドを実装したコード載せるつもりです。

最初のSQLJetを使う!記事から見ていただけるとわかるはず…

テーブルを開いて、カーソルで一個ずつ配列に入れていくという作業になります。

公式のチュートリアルに沿って作ってみました。

このメソッドの戻り値をそのままJTableに入れるとちょうど縦横の組み合わせが合うようになっています。

今回は横幅が長くなってしまったので見づらいかと思いますが、ソース上にマウスポインタを移動させるとソース枠右上にアイコンが表示されるので、一番左の「view source」をクリックすると新しいタブ(あるいはウィンドウ)でソースコードだけ表示されます。ご活用ください。

SQLJetを使う!列名取得編

今回は作成したテーブルから列(カラム)名を取得します。

テーブル内容を表示させる事にも関わってきます。

	public String[] getColumnNames(String tableName) throws SqlJetException{

		// 列名格納配列
		String[] columnNames = null;

		// 読み込みモード
		db.beginTransaction(SqlJetTransactionMode.READ_ONLY);

		// テーブルを開く
		ISqlJetTable table = db.getTable(tableName);

		// テーブルを明確化(?)
		ISqlJetTableDef tabledef = table.getDefinition();

		// 列名を取得
		List<ISqlJetColumnDef> columnList = tabledef.getColumns();

		// 列名格納配列を初期化
		columnNames = new String[columnList.size()];

		// 格納
		for(int i = 0; i < columnNames.length; i++){
			columnNames[i] = columnList.get(i).getName();
		}

		db.commit();

		return columnNames;
	}

自分でもあまりわかっていないことが多いので、ご存知の方はコメントしていただけるとありがたいです。

SQLJetを使う!テーブル一覧編

今回はデータベースファイルに入っているテーブル名を一覧表示させます。

コードは以下の通り

		// ファイル名
		String DB_name = "C:\\sample.sqlite";

		// ファイル生成
		File dbFile = new File(DB_name);

		try{
			// DBオブジェクト生成
			SqlJetDb db = SqlJetDb.open(dbFile, true);

	        // 書き込みモード
	        db.beginTransaction(SqlJetTransactionMode.READ_ONLY);
	        try{
	        	// スキーマ取得
	        	ISqlJetSchema schema = db.getSchema();

	        	// テーブル一覧取得
	        	Set<String> table_list = schema.getTableNames();

	        	// 一覧表示
	        	for(String tableName : table_list){
	        		System.out.println(tableName);
	        	}

	        }finally{
	        	db.commit();
	        }

		}catch(SqlJetException e){
			e.printStackTrace();
		}

データベースからスキーマを取得して、スキーマからテーブル一覧を取得します。

その際Setで一覧が帰ってくるので拡張for文で簡潔に表示させてみました。

載せるコードを短くしてみましたがどうでしょう?メソッドとしてそのままコピーできるような形にした方がいいですかね?

いや、そもそも需要自体あるかどうか厳しいところだな…。

Javaでファイル名と拡張子を分ける

PictSplitの副産物でファイル名と拡張子を分けるコードです。

特殊技術を使っているわけではないので自分の覚書としても書いておきます。

public class FileNameSplit {
	public static void main(String[] args){

		// 分割するファイル名
		String filename = "sample.txt";
		// ファイル名格納変数
		String name = "";
		// 拡張子格納変数
		String ext;

		// ファイル名分割
		String[] filename_ar = filename.split("\\.");

		// ファイル名格納
		int i;
		for(i = 0; i < filename_ar.length - 1; i++){
			name += filename_ar[i];
		}
		// 拡張子格納
		ext = filename_ar[i];

		// 出力
		System.out.println("ファイル名:" + name);
		System.out.println("拡張子:" + ext);
	}
}

出力は「ファイル名:sample 拡張子:txt」となります。以下解説。

投稿日:
カテゴリー: PC タグ:

PictSplit 2.4 公開!

今回は更新推奨

PictSplit2.4(zipファイル)

更新内容は

  1. 画像の名前に「.」が含まれていた際、メタファイルが移動されない不具合を修正

単純に「.」で名前と拡張子を分ける処理にしていたのでこの不具合が発生しました。