package mine.sub.sub2;
import java.io.File;
import java.net.URI;
import java.net.URISyntaxException;

public class InstallPathGetterTest
{

  /**
   * @param args
   */
  public static void main(String[] args) {
    System.out.println("System.getProperty(\"user.dir\")で取得したパス");
    System.out.println(System.getProperty("user.dir"));

    System.out.println();
    System.out.println("ここから格納パスを取る方法：");
    System.out.println("Eclipseで実行した時ならプロジェクトの出力フォルダを");
    System.out.println("Jarファイルならそのファイルの置かれているパスを表示します");
    
    System.out.println();
    
    //Jarファイルかどうかのフラグ
    boolean isJar = false;
    
    //クラスファイル名を取得します
    Class thisClass = InstallPathGetterTest.class;
    String className = thisClass.getSimpleName() + ".class";
    System.out.println("クラスファイル名:\n" + className);
    
    //クラスファイルの格納場所からURIを生成する
    URI uri = null;
    try {
      uri = thisClass.getResource(className).toURI();
    }
    catch(URISyntaxException e) {
      e.printStackTrace();
    }
    //クラスファイルのURI
    System.out.println("クラスファイルのURI:\n" + uri);
    System.out.println();
    
    //URIを文字列にして、色々処理します
    String uriStr = uri.toString();
    //URIがファイルであることを示す、"file:"で始まってなかったら"file:"より前を切ります
    if (!uriStr.startsWith("file:")) {
      //"file:"で始まってなかったらJarファイルだろう
      isJar = true;
      //"file:"より前を切ります
      uriStr = uriStr.substring(uriStr.indexOf("file:"));
    }
    System.out.println("Jarファイルヘッダーの切り取り処理後のURI:\n" + uriStr);
    System.out.println();
    
    //1つ上のパスに移動します
    uriStr = uriStr.substring(0, uriStr.lastIndexOf("/"));
    System.out.println("1つ上のパスのURI:\n" + uriStr);
    System.out.println();
    
    //パッケージの処理をします
    Package packageName = thisClass.getPackage();

    //デフォルトパッケージの場合、パッケージはnullになるので注意しましょう
    if (packageName != null) {
      System.out.println("パッケージ名:\n" + packageName.getName());
      //パッケージのパスの区切り文字はピリオドなので、URIで使うためにスラッシュに置き換える
      String packageNameForURI = packageName.getName().replace('.', '/');
      //パッケージ名と最後のスラッシュを切り取ります
      uriStr = uriStr.substring(0, uriStr.indexOf(packageNameForURI)-1);
    }
    else {
      System.out.println("パッケージ名:\n(デフォルトパッケージ)");
    }
    System.out.println("パッケージ名を切り取ったURI:\n" + uriStr);
    System.out.println();
    
    //Jarファイルの時は最後には○○.jar!となってるので1つ上のパスに移動します
    if (isJar) {
      uriStr = uriStr.substring(0, uriStr.lastIndexOf("/"));
    }
    System.out.println("最終的なURI:\n" + uriStr);
    System.out.println();
    
    try {
      //格納パスをURIからFileを生成します
      File file = new File(new URI(uriStr));
      System.out.println("格納パス:\n" + file);
    }
    catch(URISyntaxException e) {
      e.printStackTrace();
    }
  }

}
