[写真整理][java][windows]選択した写真を2クリックでフォルダに移動する

###フォトビューアで参照している写真を★★★のフォルダに振り分けを行います

写真ファイルの振り分けって、地味に手間がかかります。
選んでいるうちに番号を忘れたり、印刷しようとするのがコレジャナイ。となったり、また、要らない写真をみていたり。
必要なファイルだけを見たい！しかも超絶簡単に振り分けたいって自分の都合から、こんなものを作りました。

フォトビューアから、これ（★★★.EXE）を起動すると、今いるフォルダの一つ上に★★★をつくり、★★★に移動します。

例えば

こんなフォルダ構成にて、001.JPGから005.JPGまでのファイルがあったとします。

CANON001/
└ jpg
 　   ├ 001.jpg
   　 ├ 002.jpg
   　 ├ 003.jpg
   　 ├ 004.jpg
   　 ├ 005.jpg

この状態で、フォトビューアにて003.jpgを選択中に★★★を起動すると、以下のようにJPGと同列に★★★フォルダが作成され、003.jpgが移動されます。

CANON001/
└ jpg
 　   ├ 001.jpg
   　 ├ 002.jpg
   　 ├ 004.jpg
   　 ├ 005.jpg
├ ★★★
   　 ├ 003.jpg

移動したファイルはフォトビューアの特性上、見ているフォルダの写真や画像をリピートしてみるので、移動したファイルは見るフォルダを変えないとみることができません。

つまり、移動後、フォトビューアでは以下のファイルを参照するだけとなります。

└ jpg
 　   ├ 001.jpg
   　 ├ 002.jpg
   　 ├ 004.jpg
   　 ├ 005.jpg

移動後に★★★のフォルダから画像を見ると、以下のファイルだけが見ることができます。

├ ★★★
   　 ├ 003.jpg

幾つかの準備（JAVAを実行できる環境、フォトビューアの復活）は必要ですが、2クリック（1．開く→2．★★★）だけで写真の振り分けができるのは非常に楽ですよ。

※私が忘れっぽいだけかも（ピックアップする番号を覚えられない）
※ダウンロードできる圧縮ファイルにはJPG フォルダに戻すのと、★★に移動するのが入ってます。

![20.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/490393/e63504bc-0f95-1376-d481-8e0407173d90.jpeg)

Exe加工はlaunch4j等にて実施しています。
http://launch4j.sourceforge.net/

フォトビューアを有効にするにはこの辺りを参考に。レジストリを編集するのが手っ取り早いです。
https://popozure.info/20190823/14633

###実行ファイルのダウンロード
きっと実行ファイルだけが欲しいかと思いますので
こちらからダウンロードしたいただけば実行ファイルを入手できます。
https://drive.google.com/open?id=1dKcispHr8_D81kaPRgID7oKf27bEMfvS

###念のため、ソースも公開して置きます
```java:starSelector.java
import java.io.*;
import java.util.logging.*;
public class starSelector {
  public static final String LOGFILE = "StarSelector.log";
  public static void main(String[] args) {
    try {
      final Logger logger = Logger.getLogger("starSelector");
      try {
        // 出力ファイルを指定する
        FileHandler fh = new FileHandler("starSelector.log", true);
        // 出力フォーマットを指定する
        fh.setFormatter(new java.util.logging.SimpleFormatter());
        logger.addHandler(fh);
      } catch (IOException e) {
        e.printStackTrace();
      }
      File file = new File(args[0]);
      File parentDir = new File(file.getParent());
      //System.out.println("親の親のディレクトリ名 : " + parentDir.getParent());
      String strParentDir = file.getParent();
      String strFileName = file.getPath();
      String strStarDir = "★★★";
      File moveNewFolder = new File(parentDir.getParent() + "\\" + strStarDir);
      // 読み込みファイルチェック
      if (!file.exists() || !file.canRead()) {
        logger.log(Level.WARNING, "指定したファイルがありません");
        return;
      }
      if (file.getParent() == null) {
        logger.log(Level.INFO, "Homeディレクトリのファイルを指定しています。親ディレクトリの指定ができません");
        return;
      }
      //ディレトリチェック
      if (parentDir.getParent() == null) {
        logger.log(Level.INFO, "Homeディレクトリのファイルを指定しています。作成先のフォルダを指定できません");
        return;
      }
      moveNewFolder.mkdir();
      //ファイルの移動実施
      File file2 = new File(parentDir.getParent() + "\\" + strStarDir + "\\" + file.getName());
      try {
        if (file.renameTo(file2)) {} else {
          logger.log(Level.WARNING, "ファイルの移動に失敗しました");
        }
      } catch (SecurityException e) {
        logger.log(Level.WARNING, e.toString());
      } catch (NullPointerException e) {
        logger.log(Level.WARNING, e.toString());
      }
    } catch (ArrayIndexOutOfBoundsException err) {
      System.out.println("使い方 : java starSelector <移動するファイル>");
      return;
    }
  }
}
```