OSDN Git Service

develop とマージ
[jindolf/Jindolf.git] / src / main / java / jp / sfjp / jindolf / config / FileUtils.java
index cd75be0..1912568 100644 (file)
@@ -8,9 +8,6 @@
 package jp.sfjp.jindolf.config;
 
 import java.io.File;
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-import java.lang.reflect.Modifier;
 import java.net.URI;
 import java.net.URISyntaxException;
 import java.net.URL;
@@ -20,7 +17,6 @@ import java.util.Locale;
 
 /**
  * 諸々のファイル操作ユーティリティ。
- * JRE1.6 API へのリフレクションアクセスを含む。
  */
 public final class FileUtils{
 
@@ -31,45 +27,7 @@ public final class FileUtils{
     private static final String SCHEME_FILE = "file";
     private static final String ENTITY_YEN = "¥";
 
-    /** JRE1.6の{@link java.io.File#setReadable(boolean,boolean)}に相当。 */
-    private static final Method METHOD_SETREADABLE;
-    /** JRE1.6の{@link java.io.File#setWritable(boolean,boolean)}に相当。 */
-    private static final Method METHOD_SETWRITABLE;
-    /** Locale.ROOT代替品。 */
-    private static final Locale ROOT = new Locale("", "", "");
-
     static{
-        Method method;
-        int modifiers;
-
-        try{
-            method = File.class.getMethod(
-                    "setReadable", Boolean.TYPE, Boolean.TYPE);
-            modifiers = method.getModifiers();
-            if( ! Modifier.isPublic(modifiers) ){
-                method = null;
-            }
-        }catch(NoSuchMethodException e){
-            method = null;
-        }catch(SecurityException e){
-            method = null;
-        }
-        METHOD_SETREADABLE = method;
-
-        try{
-            method = File.class.getMethod(
-                    "setWritable", Boolean.TYPE, Boolean.TYPE);
-            modifiers = method.getModifiers();
-            if( ! Modifier.isPublic(modifiers) ){
-                method = null;
-            }
-        }catch(NoSuchMethodException e){
-            method = null;
-        }catch(SecurityException e){
-            method = null;
-        }
-        METHOD_SETWRITABLE = method;
-
         assert ! ( isMacOSXFs() && isWindowsOSFs() );
         new FileUtils().hashCode();
     }
@@ -86,124 +44,10 @@ public final class FileUtils{
 
 
     /**
-     * パーミッション操作メソッドの下請け。
-     * リフレクション機構に関する異常系を吸収する。
-     * @param method setReadableかsetWritableのいずれかの2引数版メソッド。
-     * @param file 捜査対象のファイル
-     * @param flag 操作フラグ
-     * @param ownerOnly 対象は所有者のみか否か
-     * @return メソッドの戻り値。成功すればtrue
-     * @throws InvocationTargetException メソッドが発した異常系
-     */
-    private static boolean reflectFilePermOp(
-            Method method, File file, boolean flag, boolean ownerOnly)
-            throws InvocationTargetException {
-        Object result;
-        try{
-            result = method.invoke(file, flag, ownerOnly);
-        }catch(IllegalAccessException e){
-            assert false;
-            throw new AssertionError(e);
-        }catch(IllegalArgumentException e){
-            assert false;
-            throw new AssertionError(e);
-        }catch(ExceptionInInitializerError e){
-            assert false;
-            throw new AssertionError(e);
-        }
-
-        assert result instanceof Boolean;
-        Boolean boolResult = (Boolean) result;
-
-        return boolResult;
-    }
-
-    /**
-     * パーミッション操作メソッドの下請け。
-     * @param method setReadableかsetWritableのいずれかの2引数版メソッド。
-     * @param file 操作対象のファイル。
-     * @param flag 操作フラグ
-     * @param ownerOnly 対象は所有者のみか否か
-     * @return 成功すればtrue
-     * @throws SecurityException セキュリティ上の許可が無い場合
-     */
-    private static boolean invokeFilePermOp(
-            Method method, File file, boolean flag, boolean ownerOnly)
-            throws SecurityException{
-        boolean result;
-
-        try{
-            result = reflectFilePermOp(method, file, flag, ownerOnly);
-        }catch(InvocationTargetException e){
-            Throwable cause = e.getCause();
-            if(cause instanceof SecurityException){
-                throw (SecurityException) cause;
-            }else if(cause instanceof RuntimeException){
-                throw (RuntimeException) cause;
-            }else if(cause instanceof Error){
-                throw (Error) cause;
-            }
-
-            assert false;
-            throw new AssertionError(e);
-        }
-
-        return result;
-    }
-
-    /**
-     * ファイルの読み込みパーミッションを操作する。
-     * JRE1.6の{@link java.io.File#setReadable(boolean,boolean)}
-     * の代用品。
-     *
-     * <p>JRE1.6でなければなにもせずにfalseを返す。
-     *
-     * @param file ファイルorディレクトリ
-     * @param flag 操作フラグ
-     * @param ownerOnly 対象は所有者のみか否か
-     * @return 成功すればtrue
-     * @throws SecurityException セキュリティ上の許可が無い場合
-     */
-    public static boolean setReadable(
-            File file, boolean flag, boolean ownerOnly )
-            throws SecurityException {
-        if(file == null) throw new NullPointerException();
-        if(METHOD_SETREADABLE == null) return false;
-
-        boolean result;
-        result = invokeFilePermOp(METHOD_SETREADABLE, file, flag, ownerOnly);
-        return result;
-    }
-
-    /**
-     * ファイルの書き込みパーミッションを操作する。
-     * JRE1.6の{@link java.io.File#setWritable(boolean,boolean)}
-     * の代用品。
-     *
-     * <p>JRE1.6でなければなにもせずにfalseを返す。
-     *
-     * @param file ファイルorディレクトリ
-     * @param flag 操作フラグ
-     * @param ownerOnly 対象は所有者のみか否か
-     * @return 成功すればtrue
-     * @throws SecurityException セキュリティ上の許可が無い場合
-     */
-    public static boolean setWritable(
-            File file, boolean flag, boolean ownerOnly )
-            throws SecurityException {
-        if(file == null) throw new NullPointerException();
-        if(METHOD_SETWRITABLE == null) return false;
-
-        boolean result;
-        result = invokeFilePermOp(METHOD_SETWRITABLE, file, flag, ownerOnly);
-        return result;
-    }
-
-    /**
      * なるべく自分にだけ読み書き許可を与え
      * 自分以外には読み書き許可を与えないように
      * ファイル属性を操作する。
-     * JRE1.6環境でなければなにもしない。
+     *
      * @param file 操作対象ファイル
      * @return 成功すればtrue
      * @throws SecurityException セキュリティ上の許可が無い場合
@@ -212,17 +56,18 @@ public final class FileUtils{
             throws SecurityException{
         boolean result = true;
 
-        result &= setReadable(file, false, false);
-        result &= setReadable(file, true,  true);
+        result &= file.setReadable(false, false);
+        result &= file.setReadable(true,  true);
 
-        result &= setWritable(file, false, false);
-        result &= setWritable(file, true, true);
+        result &= file.setWritable(false, false);
+        result &= file.setWritable(true, true);
 
         return result;
     }
 
     /**
      * 任意の絶対パスの祖先の内、存在するもっとも近い祖先を返す。
+     *
      * @param file 任意の絶対パス
      * @return 存在するもっとも近い祖先。一つも存在しなければnull。
      * @throws IllegalArgumentException 引数が絶対パスでない
@@ -238,6 +83,7 @@ public final class FileUtils{
 
     /**
      * 任意の絶対パスのルートファイルシステムもしくはドライブレターを返す。
+     *
      * @param file 任意の絶対パス
      * @return ルートファイルシステムもしくはドライブレター
      * @throws IllegalArgumentException 引数が絶対パスでない
@@ -252,6 +98,7 @@ public final class FileUtils{
 
     /**
      * 相対パスの絶対パス化を試みる。
+     *
      * @param file 対象パス
      * @return 絶対パス。絶対化に失敗した場合は元の引数。
      */
@@ -271,7 +118,8 @@ public final class FileUtils{
 
     /**
      * 任意のディレクトリがアクセス可能な状態にあるか判定する。
-     * アクセス可能の条件を満たすためには、与えられたパスが
+     *
+     * <p>アクセス可能の条件を満たすためには、与えられたパスが
      * <ul>
      * <li>存在し、
      * <li>かつディレクトリであり、
@@ -279,6 +127,7 @@ public final class FileUtils{
      * <li>かつ書き込み可能
      * </ul>
      * でなければならない。
+     *
      * @param path 任意のディレクトリ
      * @return アクセス可能ならtrue
      */
@@ -298,6 +147,7 @@ public final class FileUtils{
     /**
      * クラスがローカルファイルからロードされたのであれば
      * そのファイルを返す。
+     *
      * @param klass 任意のクラス
      * @return ロード元ファイル。見つからなければnull。
      */
@@ -330,6 +180,7 @@ public final class FileUtils{
 
     /**
      * すでに存在するJARファイルか判定する。
+     *
      * @param file 任意のファイル
      * @return すでに存在するJARファイルであればtrue
      */
@@ -349,6 +200,7 @@ public final class FileUtils{
     /**
      * クラスがローカルJARファイルからロードされたのであれば
      * その格納ディレクトリを返す。
+     *
      * @param klass 任意のクラス
      * @return ロード元JARファイルの格納ディレクトリ。
      *     JARが見つからない、もしくはロード元がJARファイルでなければnull。
@@ -367,6 +219,7 @@ public final class FileUtils{
     /**
      * このクラスがローカルJARファイルからロードされたのであれば
      * その格納ディレクトリを返す。
+     *
      * @return ロード元JARファイルの格納ディレクトリ。
      *     JARが見つからない、もしくはロード元がJARファイルでなければnull。
      */
@@ -376,7 +229,9 @@ public final class FileUtils{
 
     /**
      * ホームディレクトリを得る。
-     * システムプロパティuser.homeで示されたホームディレクトリを返す。
+     *
+     * <p>システムプロパティuser.homeで示されたホームディレクトリを返す。
+     *
      * @return ホームディレクトリ。何らかの事情でnullを返す場合もあり。
      */
     public static File getHomeDirectory(){
@@ -394,6 +249,7 @@ public final class FileUtils{
 
     /**
      * MacOSX環境か否か判定する。
+     *
      * @return MacOSX環境ならtrue
      */
     public static boolean isMacOSXFs(){
@@ -408,7 +264,7 @@ public final class FileUtils{
 
         if(osName == null) return false;
 
-        osName = osName.toLowerCase(ROOT);
+        osName = osName.toLowerCase(Locale.ROOT);
 
         if(osName.startsWith("mac os x")){
             return true;
@@ -419,6 +275,7 @@ public final class FileUtils{
 
     /**
      * Windows環境か否か判定する。
+     *
      * @return Windows環境ならtrue
      */
     public static boolean isWindowsOSFs(){
@@ -433,7 +290,7 @@ public final class FileUtils{
 
         if(osName == null) return false;
 
-        osName = osName.toLowerCase(ROOT);
+        osName = osName.toLowerCase(Locale.ROOT);
 
         if(osName.startsWith("windows")){
             return true;
@@ -444,7 +301,8 @@ public final class FileUtils{
 
     /**
      * アプリケーション設定ディレクトリを返す。
-     * 存在の有無、アクセスの可否は関知しない。
+     *
+     * <p>存在の有無、アクセスの可否は関知しない。
      *
      * <p>WindowsやLinuxではホームディレクトリ。
      * Mac OS X ではさらにホームディレクトリの下の
@@ -470,7 +328,9 @@ public final class FileUtils{
 
     /**
      * ファイル名を表示するためのJLabel用HTML文字列を生成する。
-     * Windows日本語環境では、バックスラッシュ記号が円通貨記号に置換される。
+     *
+     * <p>Windows日本語環境では、バックスラッシュ記号が円通貨記号に置換される。
+     *
      * @param file 対象ファイル
      * @return HTML文字列断片
      */