001/* 002 * Copyright (c) 2009 The openGion Project. 003 * 004 * Licensed under the Apache License, Version 2.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of the License at 007 * 008 * http://www.apache.org/licenses/LICENSE-2.0 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, 013 * either express or implied. See the License for the specific language 014 * governing permissions and limitations under the License. 015 */ 016package org.opengion.fukurou.util; 017 018import java.io.File; 019import java.io.IOException; 020import java.util.Locale; 021 022/** 023 * FileInfo.java は、共通的に使用される File関連の情報管理を行うクラスです。 024 * 025 * ファイルオブジェクトより、ファイル名、ファイル名(拡張子無し)、拡張子(ピリオド無)、 親パス 026 * の情報を、分割します。 027 * また、一部のFileUtilのファイル属性を扱うメソッド類を移植してきました。 028 * 029 * 絶対パス は、File#getCanonicalPath() の値を設定します。 030 * ../AAA/BBB/CCC.XLS というファイルオブジェクトに対して、 031 * 032 * FILE : CCC.xls ファイル名 033 * NAME : CCC 拡張子なしのファイル名 034 * SUFIX : xls ピリオド無しの拡張子(小文字に統一) 035 * DIR : C:\tmp\BBB 親パス 036 * 037 * ファイル名と、拡張子は、File#getName() の結果から、一番最後に見つかった 038 * ピリオドで、前後を分割します。拡張子にはピリオドを含みません。 039 * ピリオドがなければ、File#getName() の結果をファイル名に設定し、 040 * 拡張子は、空文字列を設定します。 041 * 042 * @og.rev 5.9.0.0 (2015/09/04) Ver.6からの逆移植 043 * @og.group ユーティリティ 044 * 045 * @version 6.0 046 * @author Kazuhiko Hasegawa 047 * @since JDK8.0, 048 */ 049public final class FileInfo { 050 /** ファイル情報のキー */ 051 public static final String[] KEYS = { "FILE","NAME","SUFIX","DIR" }; 052 053 /** CCC.xls ファイル名 */ 054 public final String FILE ; 055 /** CCC 拡張子なしのファイル名 */ 056 public final String NAME ; 057 /** xls ピリオド無しの拡張子(小文字に統一) */ 058 public final String SUFIX ; 059 /** C:\tmp\BBB 親パス */ 060 public final String DIR ; 061 062 /** 063 * ファイルオブジェクトを引数に取るコンストラクター 064 * 065 * 絶対パス は、File#getCanonicalPath() の値を設定します。 066 * ../AAA/BBB/CCC.XLS というファイルオブジェクトに対して、 067 * FILE : Fileオブジェクト File#getCanonicalFile() の値 068 * 069 * FILE : CCC.xls ファイル名 070 * NAME : CCC 拡張子なしのファイル名 071 * SUFIX : xls ピリオド無しの拡張子(小文字に統一) 072 * DIR : C:\tmp\BBB 親パス 073 * 074 * ファイルオブジェクトは、File#getCanonicalFile(File) で、絶対パスに変換後、内部処理されます。 075 * 必要な情報は、final String に設定されるため、そこから情報を取得してください。 076 * 077 * @og.rev 6.2.0.0 (2015/02/27) 新規作成 078 * 079 * @param file ファイルオブジェクト 080 */ 081 public FileInfo( final File file ) { 082 final File ccFile ; 083 try { 084 ccFile = file.getCanonicalFile(); 085 } 086 catch( IOException ex ) { 087 final String errMsg = "ファイルの正式パス名が取得できません。[" + file + "]"; 088 throw new RuntimeException( errMsg,ex ); 089 } 090 091 FILE = ccFile.getName(); 092 final int extPos = FILE.lastIndexOf( '.' ); 093 if( extPos >= 0 ) { 094 NAME = FILE.substring( 0,extPos ); 095 SUFIX = FILE.substring( extPos + 1 ).toLowerCase( Locale.JAPAN ); // ピリオドを含まない 096 } 097 else { 098 NAME = FILE; 099 SUFIX = ""; // 拡張子が無ければ、空文字列 100 } 101 DIR = ccFile.getParent(); 102 } 103 104 /** 105 * キーに対応した値を返します。 106 * 107 * キーは、値が文字列の分だけです。 108 * 109 * @og.rev 6.2.0.0 (2015/02/27) 新規作成 110 * 111 * @param key ファイル情報のキー 112 * @return ファイル情報の値(キーが未設定の場合はnull) 113 * @throws NullPointerException key に null がセットされた場合 114 */ 115 public String getValue( final String key ) { 116 final String rtn ; 117// switch( key ) { 118// case "FILE" : rtn = FILE; break; 119// case "NAME" : rtn = NAME; break; 120// case "SUFIX" : rtn = SUFIX; break; 121// case "DIR" : rtn = DIR; break; 122// default : rtn = null; break; 123// } 124 if( "FILE".equals( key )){ rtn = FILE; } 125 else if( "NAME".equals( key ) ){ rtn = NAME; } 126 else if( "SUFIX".equals( key ) ){ rtn = SUFIX; } 127 else if( "DIR".equals( key ) ){ rtn = DIR; } 128 else { rtn = null; } 129 130 131 return rtn ; 132 } 133 134 /** 135 * ファイルオブジェクトから、名前部分のみを取得します。 136 * 137 * 名前だけ取得したい場合の、簡易スタティックメソッドです。 138 * ピリオドがない場合は、ファイル名を、先頭がピリオドの場合は、 139 * ゼロ文字列です。 140 * オブジェクトを作成しません。 141 * 142 * @og.rev 6.2.3.0 (2015/05/01) 新規作成 143 * 144 * @param file ファイルオブジェクト 145 * @return ファイルの名称(引数がnullの場合はnull) 146 */ 147 public static String getNAME( final File file ) { 148 return file == null ? null : getNAME( file.getName() ) ; 149 } 150 151 /** 152 * ファイル文字列から、名前部分のみを取得します。 153 * 154 * 名前だけ取得したい場合の、簡易スタティックメソッドです。 155 * ピリオドがない場合は、ファイル名を、先頭がピリオドの場合は、 156 * ゼロ文字列です。 157 * 158 * @og.rev 6.2.3.0 (2015/05/01) 新規作成 159 * 160 * @param filename ファイル文字列 161 * @return ファイルの名称(引数がnullの場合はnull) 162 */ 163 public static String getNAME( final String filename ) { 164 String name = null; 165 if( filename != null ) { 166 final int extPos = filename.lastIndexOf( '.' ); 167 if( extPos >= 0 ) { 168 name = filename.substring( 0,extPos ); 169 } 170 } 171 return name ; 172 } 173 174 /** 175 * ファイルオブジェクトから、拡張子(小文字に統一)のみを取得します。 176 * 177 * 拡張子だけ取得したい場合の、簡易スタティックメソッドです。 178 * ピリオドがない場合は、ゼロ文字列を返します。 179 * オブジェクトを作成しません。 180 * 181 * @og.rev 6.2.3.0 (2015/05/01) 新規作成 182 * 183 * @param file ファイルオブジェクト 184 * @return ファイルの拡張子(小文字に統一,引数がnullの場合はnull) 185 */ 186 public static String getSUFIX( final File file ) { 187 return file == null ? null : getSUFIX( file.getName() ) ; 188 } 189 190 /** 191 * ファイル文字列から、拡張子(小文字に統一)のみを取得します。 192 * 193 * 拡張子だけ取得したい場合の、簡易スタティックメソッドです。 194 * ピリオドがない場合は、ゼロ文字列を返します。 195 * 196 * @og.rev 6.2.3.0 (2015/05/01) 新規作成 197 * 198 * @param filename ファイル文字列 199 * @return ファイルの拡張子(小文字に統一,引数がnullの場合はnull) 200 */ 201 public static String getSUFIX( final String filename ) { 202 String sufix = null; 203 if( filename != null ) { 204 final int extPos = filename.lastIndexOf( '.' ); 205 if( extPos >= 0 ) { 206 sufix = filename.substring( extPos + 1 ).toLowerCase( Locale.JAPAN ); // ピリオドを含まない 207 } 208 else { 209 sufix = ""; // 拡張子が無ければ、空文字列 210 } 211 } 212 return sufix ; 213 } 214 215 /** 216 * ファイルオブジェクトから、指定の拡張子かどうかを判定します。 217 * 218 * 拡張子判定に特化した、簡易スタティックメソッドです。 219 * 引数の拡張子には、ピリオドは含めません。 220 * 比較する拡張子の大文字小文字は区別しません。 221 * 222 * @og.rev 6.2.4.0 (2015/05/15) 新規作成 223 * 224 * @param file ファイルオブジェクト 225 * @param sufix 拡張子群 226 * @return true:拡張子が含まれる/false:含まれない 227 */ 228 public static boolean isSUFIX( final File file , final String... sufix ) { 229 final String fsfx = getSUFIX( file ); 230 if( fsfx != null && !fsfx.isEmpty() ) { 231 for( int i=0; i<sufix.length; i++ ) { 232 if( fsfx.equalsIgnoreCase( sufix[i] ) ) { return true; } 233 } 234 } 235 return false; 236 } 237 238 /** 239 * ファイル文字列から、指定の拡張子かどうかを判定します。 240 * 241 * 拡張子判定に特化した、簡易スタティックメソッドです。 242 * 引数の拡張子には、ピリオドは含めません。 243 * 比較する拡張子の大文字小文字は区別しません。 244 * 245 * @og.rev 6.2.4.0 (2015/05/15) 新規作成 246 * 247 * @param filename ファイル文字列 248 * @param sufix 拡張子群 249 * @return true:拡張子が含まれる/false:含まれない 250 */ 251 public static boolean isSUFIX( final String filename , final String... sufix ) { 252 final String fsfx = getSUFIX( filename ); 253 if( fsfx != null && !fsfx.isEmpty() ) { 254 for( int i=0; i<sufix.length; i++ ) { 255 if( fsfx.equalsIgnoreCase( sufix[i] ) ) { return true; } 256 } 257 } 258 return false; 259 } 260}