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 */ 016// package org.opengion.fukurou.model; 017package org.opengion.cloud; // 8.0.0.2 (2021/10/15) fukurou.model → cloud にパッケージ移動 018 019import java.io.ByteArrayInputStream; 020import java.io.ByteArrayOutputStream; 021import java.io.File; 022import java.io.FileFilter; 023import java.io.FileNotFoundException; 024import java.io.IOException; 025import java.io.InputStream; 026import java.net.URI; 027import java.util.ArrayList; 028import java.util.List; 029import java.util.regex.Matcher; 030import java.util.regex.Pattern; 031 032// import org.opengion.fukurou.system.Closer; // 8.5.4.2 (2024/01/12) PMD 7.0.0 CloseResource 対応 033import org.opengion.fukurou.util.StringUtil; 034import org.opengion.fukurou.system.FileOperation; // 8.5.6.0 (2024/02/29) package変更 fukurou.model → fukurou.system 035 036/** 037 * クラウドストレージ対応用の抽象クラスです。 038 * 各ベンダーのストレージに対応したプラグインを作成する場合はこのクラスを継承してください。 039 * 040 * 041 * @og.group ファイル操作 042 * 043 * @og.rev 5.10.8.0 (2019/02/01) 新規作成 044 * @og.rev 5.10.9.0 (2019/03/01) 変更対応 045 * @og.rev 8.0.0.2 (2021/10/15) fukurou.model → cloud にパッケージ移動 046 * @author oota 047 * @since JDK7.0 048 */ 049public abstract class CloudFileOperation extends FileOperation { 050 /** このプログラムのVERSION文字列を設定します。{@value} */ 051 private static final String VERSION = "8.5.6.1 (2024/03/29)" ; 052 private static final long serialVersionUID = 856120240329L ; 053 054 /** バッファサイズ {@value} */ 055 private static final int BUFFER_SIZE = 1024 * 4; 056 057 private static final String UNIMPLEMNTED_ERR="このクラスでは未実装のメソッドです。"; 058 private static final char FS = '/' ; 059 /** 5.10.12.2 (2019/06/17) 相対パス対応「../」と1つ前のディレクトリ情報を抽出(1つ前が先頭の場合は、/ではなく^) */ 060 // 7.2.9.4 (2020/11/20) PMD:Variables that are final and static should be all capitals, 'ptnPreDir' is not all capitals. 061// private static final Pattern ptnPreDir = Pattern.compile("(?<=/|^)[^/]+/\\.\\./"); 062 private static final Pattern PTN_PRE_DIR = Pattern.compile("(?<=/|^)[^/]+/\\.\\./"); 063 064 /** パス */ 065 protected final String conPath; 066 /** バケット名 */ 067 protected final String conBucket; 068 069 /** 070 * コンストラクタ 071 * 072 * @param bucket バケット名 073 * @param inPath ファイルパス 074 */ 075 public CloudFileOperation( final String bucket, final String inPath ) { 076 super(inPath); 077 078 conPath = editPath(replaceFileSeparetor(inPath)); 079 conBucket = bucket; 080 081 if (StringUtil.isNull(conBucket)) { 082 final String errMsg = "バケット未指定です。hayabusa利用ではシステム変数の「CLOUD_BUCKET」にバケット名を設定して下さい。"; 083 throw new RuntimeException(errMsg); 084 } 085 } 086 087 // ************* 《FileOperation クラスの継承》************* 088 089 /** 090 * 書き込み処理(評価用) 091 * 092 * Fileを書き込みます。 093 * 094 * @og.rev 8.0.0.1 (2021/10/08) 新規追加 095 * @param inFile 書き込みFile 096 * @throws IOException ファイル関連エラー情報 097 */ 098 @Override // FileOperation 099 public abstract void write(final File inFile) throws IOException ; 100 101 /** 102 * データ書き込み 103 * 104 * InputStreamのデータを書き込みます。 105 * 106 * @param is 書き込みデータのInputStream 107 * @throws IOException IO関連のエラー情報 108 */ 109 @Override // FileOperation 110 public abstract void write(InputStream is) throws IOException; 111 112 /** 113 * データ読み込み 114 * 115 * データを読み込み、InputStreamを返します。 116 * 117 * @og.rev 8.5.4.2 (2024/01/12) throws を FileNotFoundException ⇒ IOException に変更 118 * 119 * @return 読み込みデータのInputStream 120 * @throws FileNotFoundException ファイル非存在エラー情報 121 */ 122 @Override // FileOperation 123// public abstract InputStream read() throws FileNotFoundException; 124 public abstract InputStream read() throws IOException; 125 126 /** 127 * ファイルコピー 128 * 129 * ファイルを指定先にコピーします。 130 * 131 * @param afPath コピー先 132 * @return 成否フラグ 133 */ 134 @Override // FileOperation 135 public abstract boolean copy(String afPath); 136 137 /** 138 * ファイル移動 139 * 140 * ファイルを指定先に移動します。 141 * 142 * @param afPath 移動先 143 * @return 成否フラグ 144 */ 145 @Override // FileOperation 146 public boolean move(final String afPath) { 147 return copy(afPath) && delete(); 148 149// boolean flgRtn = false; 150// 151// flgRtn = copy(afPath); 152// if (flgRtn) { 153// flgRtn = delete(); 154// } 155// 156// return flgRtn; 157 } 158 159 /** 160 * 保存先のクラウド判定。 161 * 162 * 判定結果を返します。 163 * trueの場合は、クラウドストレージ保存。 164 * falseの場合は、ローカルに保存です。 165 * 166 * @return クラウドならtrue 167 */ 168 @Override // FileOperation 169 public boolean isCloud() { 170 return true; 171 } 172 173 // ************* 《File クラスの継承》************* 174 // ************* 《クラウド毎に再定義が必要》************* 175 176 /** 177 * ファイル削除 178 * 179 * ファイルを削除します。 180 * 181 * @return 成否フラグ 182 */ 183 @Override // File 184 public abstract boolean delete(); 185 186 /** 187 * ファイルサイズ取得(Fileクラス) 188 * 189 * ファイルサイズを返します。 190 * 191 * @return ファイルサイズ 192 * @see java.io.File#isFile() 193 */ 194 @Override // File 195 public abstract long length(); 196 197 /** 198 * 最終更新時刻取得(Fileクラス) 199 * 200 * 最終更新時刻を返します。 201 * 202 * @return 最終更新時刻 203 * @see java.io.File#lastModified() 204 */ 205 @Override // File 206 public abstract long lastModified(); 207 208 /** 209 * ファイル判定(Fileクラス) 210 * 211 * ファイルの場合は、trueを返します。 212 * 213 * @return ファイルフラグ 214 * @see java.io.File#isFile() 215 */ 216 @Override // File 217 public abstract boolean isFile(); 218 219 /** 220 * ディレクトリ判定(Fileクラス) 221 * 222 * ディレクトリの場合は、trueを返します。 223 * 224 * @return ディレクトリフラグ 225 * @see java.io.File#isDirectory() 226 */ 227 @Override // File 228 public abstract boolean isDirectory(); 229 230 /** 231 * 一覧取得(Fileクラス) 232 * 233 * パスのファイルと、ディレクトリ一覧を取得します。 234 * 235 * @param filter ファイルフィルター 236 * @return ファイルとティレクトリ一覧 237 * @see java.io.File#listFiles(FileFilter) 238 */ 239 @Override // File 240 public abstract File[] listFiles(FileFilter filter); 241 242 /** 243 * 親ディレクトリの取得(Fileクラス) 244 * 245 * 親のディレクトリ情報を返します。 246 * 247 * @return 親のディレクトリ 248 * @see java.io.File#getParentFile() 249 */ 250 @Override // File 251 public abstract File getParentFile(); 252 253 // ************* 《File クラスの継承》************* 254 // ************* 《共通定義》************* 255 256 /** 257 * ファイルパス取得(Fileクラス) 258 * 259 * ファイルパスを取得します。 260 * 261 * @return 設定パス 262 * @see java.io.File#getPath() 263 */ 264 @Override // File 265 public String getPath() { 266 return conPath; 267 } 268 269 /** 270 * 絶対パス取得(Fileクラス) 271 * 272 * 絶対パスを取得します。 273 * 274 * @return 絶対パス 275 * @see java.io.File#getAbsolutePath() 276 */ 277 @Override // File 278 public String getAbsolutePath() { 279 return conPath; 280 } 281 282 /** 283 * ファイル名取得(Fileクラス) 284 * 285 * ファイル名を取得します。 286 * 287 * @og.rev 8.5.6.1 (2024/03/29) drawName(String) の処理をgetName()に移動 288 * 289 * @return 名称 290 * @see java.io.File#getName() 291 */ 292 @Override // File 293 public String getName() { 294// return drawName(conPath); 295 final int kk = conPath.lastIndexOf(FS); // FS はシステム 296 297 return kk > 0 ? conPath.substring(kk + 1) : conPath ; 298 } 299 300 /** 301 * 親のパス取得(Fileクラス) 302 * 303 * 親のパスを取得します。 304 * 継承元の Fileクラスでは、親ディレクトリを示さない場合はnullを返しますが、 305 * ここでは、ファイルセパレータ(/ 固定)があればその上位を、なければ "" を返します。 306 * さらに、実行システムのファイルセパレータが(/)の場合は、先頭に、"/" を追加します。 307 * 308 * @og.rev 8.5.6.1 (2024/03/29) drawParent(String) の処理をgetParent()に移動 309 * 310 * @return 親のパス 311 * @see java.io.File#getParent() 312 */ 313 @Override // File 314 public String getParent() { 315// return drawParent(conPath); 316 317 String rtn = ""; 318 319 // 8.5.4.2 (2024/01/12) PMD 7.0.0 ShortVariable k ⇒ kk に変更 320 final int kk = conPath.lastIndexOf(FS); 321 if (kk > 0) { 322 rtn = conPath.substring(0, kk); 323 } 324 // システムが Linux系の場合、先頭に "/" を付けます。 325 if ("/".equals(File.separator)) { // システム依存のファイル区切り文字との比較 326 rtn = File.separator + rtn; 327 } 328 329 return rtn; 330 } 331 332 /** 333 * 存在チェック(Fileクラス) 334 * 335 * 存在する場合は、trueを返します。 336 * 337 * @return 存在フラグ 338 * @see java.io.File#exists() 339 */ 340 @Override // File 341 public boolean exists() { 342 return isDirectory() | isFile(); 343 } 344 345 /** 346 * ディレクトリの作成(Fileクラス) 347 * 348 * ※1つのディレクトリのみ作成します。 349 * クラウドストレージにはディレクトリの概念が無いため、 350 * 作成は行わず、trueを返します。 351 * 352 * @return 成否フラグ 353 * @see java.io.File#mkdir() 354 */ 355 @Override // File 356 public boolean mkdir() { 357 return true; 358 } 359 360 /** 361 * ディレクトリの作成(複数)(Fileクラス) 362 * 363 * ※複数のディレクトリを作成します。 364 * クラウドストレージにはディレクトリの概念が無いため、 365 * 作成は行わず、trueを返します。 366 * 367 * @return 成否フラグ 368 * @see java.io.File#mkdirs() 369 */ 370 @Override // File 371 public boolean mkdirs() { 372 return true; 373 } 374 375 /** 376 * ファイル名変更(Fileクラス) 377 * 378 * 指定のファイル情報のファイル名に変更します。 379 * 380 * @param dest 変更後のファイル情報 381 * @return 成否フラグ 382 * @see java.io.File#renameTo(File) 383 */ 384 @Override // File 385 public boolean renameTo(final File dest) { 386 return move(dest.getPath()); 387 } 388 389 /** 390 * 書き込み可能フラグ(Fileクラス) 391 * 392 * ※クラウドストレージの場合は、 393 * 存在すればtrueを返します。 394 * 395 * @return 書き込み可能フラグ 396 * @see java.io.File#canWrite() 397 */ 398 @Override // File 399 public boolean canWrite() { 400 return exists(); 401 } 402 403 /** 404 * 読み取り可能フラグ(Fileクラス) 405 * 406 * ※クラウドストレージの場合は、 407 * 存在すればtrueを返します。 408 * 409 * @return 読み取り可能フラグ 410 * @see java.io.File#canRead() 411 */ 412 @Override // File 413 public boolean canRead() { 414 return exists(); 415 } 416 417 /** 418 * 隠しファイルフラグ(Fileクラス) 419 * 420 * ※クラウドストレージの場合は、 421 * 必ずfalseを返します。 422 * 423 * @return 隠しファイルフラグ 424 * @see java.io.File#isHidden() 425 */ 426 @Override // File 427 public boolean isHidden() { 428 return false; 429 } 430 431 /** 432 * 新規ファイル作成(Fileクラス) 433 * 434 * 既にファイルが存在しない場合のみ、 435 * 空のファイルを作成します。 436 * 437 * @og.rev 8.5.4.2 (2024/01/12) PMD 7.0.0 CloseResource 対応 438 * 439 * @return 指定されたファイルが存在せず、ファイルの生成に成功した場合はtrue、示されたファイルがすでに存在する場合はfalse 440 * @throws IOException ファイル関連エラー情報 441 * @see java.io.File#createNewFile() 442 */ 443 @Override // File 444 public boolean createNewFile() throws IOException { 445 boolean rtn = false; 446 447 if (!exists()) { 448 // 8.5.4.2 (2024/01/12) PMD 7.0.0 CloseResource 対応 449// InputStream is = null; 450// try { 451// is = new ByteArrayInputStream(new byte[0]); 452 try ( InputStream is = new ByteArrayInputStream(new byte[0]) ) { 453 write(is); 454 rtn = true; 455 } 456// finally { 457// Closer.ioClose(is); 458// } 459 } 460 461 return rtn; 462 } 463 464 /** 465 * 最終更新時刻の更新(Fileクラス) 466 * 467 * 最終更新時刻の更新を行います。 468 * ※クラウドストレージの場合は、 469 * 最終更新時刻の更新を行えません。 470 * 471 * @param time 更新する最終更新時刻 472 * @return 成否フラグ 473 * @see java.io.File#setLastModified(long) 474 */ 475 @Override // File 476 public boolean setLastModified(final long time) { 477 // クラウドストレージでは、setLastModifiedによる、 478 // 最終更新時刻の設定はできないので、 479 // 処理を行わずにtrueを返します。 480 return true; 481 } 482 483 /** 484 * カノニカルファイル情報の取得 485 * 486 * ※ローカルサーバのみ通常ファイルと、 487 * カノニカルファイルで異なります。 488 * 489 * @return カノニカルファイル情報 490 * @throws IOException ファイル関連エラー情報 491 * @see java.io.File#getCanonicalFile() 492 */ 493 @Override // FileOperation 494 public FileOperation getCanonicalFile() throws IOException { 495 return this; 496 } 497 498 /** 499 * toString(Fileクラス) 500 * 501 * パスを返します。 502 * Fileクラスの拡張なので、path のみを返します。 503 * 504 * @return ファイルパス 505 * @see java.io.File#toString() 506 */ 507 @Override // File 508 public String toString() { 509 return conPath; 510 } 511 512 /** 共通関数 **/ 513 514 /** 515 * ファイルパスの編集 516 * 517 * パスの先頭が「/」の場合は「/」の除去と、「//」を「/」に置換処理の追加。 518 * 519 * @og.rev 5.10.12.2 (2019/06/17) 相対パス対応 520 * @og.rev 8.0.0.1 (2021/10/08) protected → private 521 * @og.rev 8.0.2.0 (2021/11/30) fukurou.util.rTrim(String,char) 使用 522 * 523 * @param path ファイルパス 524 * @return 変更後パス 525 */ 526// protected String editPath(final String path) { 527 private String editPath(final String path) { 528 if (StringUtil.isNull(path)) { return ""; } 529 530 String rtn = path; 531 532 // 「//+」は「/」に置換 533 rtn = rtn.replaceAll("//+", "/"); 534 // 先頭が「/」の場合は除去 535// if ("/".equals(rtn.substring(0, 1))) { 536 if( FS == rtn.charAt(0) ) { 537 rtn = rtn.substring(1); 538 } 539 // 後尾の「.」は除去 540// rtn = rTrim(rtn, '.'); 541 rtn = StringUtil.rTrim(rtn, '.'); // 8.0.2.0 (2021/11/30) 542 // 後尾の「/」は除去 543// rtn = rTrim(rtn, FS); 544 rtn = StringUtil.rTrim(rtn, FS); // 8.0.2.0 (2021/11/30) 545 546 // 5.10.12.2 (2019/06/17) 547 // 「../」の文字列は1つ上のディレクトリに変換を行います。 548 Matcher mtc = PTN_PRE_DIR.matcher(rtn); 549 550 // 「../」が無くなるまで、1つずづ変換します。 551 while(mtc.find()) { 552 rtn = mtc.replaceFirst(""); 553 mtc = PTN_PRE_DIR.matcher(rtn); 554 } 555 556 return rtn; 557 } 558 559// /** 560// * 親のパスを抽出 561// * 562// * キーから親のパスを抽出します。 563// * 564// * @og.rev 8.0.0.1 (2021/10/08) protected → private 565// * @og.rev 8.5.6.1 (2024/03/29) drawParent(String) の処理をgetParent()に移動 566// * 567// * @param key キー 568// * @return 親のパス 569// */ 570//// protected String drawParent(final String key) { 571// private String drawParent(final String key) { 572// String rtn = ""; 573// 574// // 8.5.4.2 (2024/01/12) PMD 7.0.0 ShortVariable k ⇒ kk に変更 575// final int kk = key.lastIndexOf(FS); 576// if (kk > 0) { 577//// rtn = key.substring(0, key.lastIndexOf(FS)); 578// rtn = key.substring(0, kk); 579// } 580// if ("/".equals(File.separator)) { 581// rtn = File.separator + rtn; 582// } 583// 584// return rtn; 585// } 586 587// /** 588// * 名称の抽出 589// * 590// * 引数のkeyから名称を抽出します。 591// * 592// * @og.rev 8.0.0.1 (2021/10/08) protected → private 593// * @og.rev 8.5.6.1 (2024/03/29) drawName(String) の処理をgetName()に移動 594// * 595// * @param key キー(パス) 596// * @return 名称 597// */ 598//// protected String drawName(final String key) { 599// private String drawName(final String key) { 600// String rtn = key; 601// 602// // 8.5.4.2 (2024/01/12) PMD 7.0.0 ShortVariable k ⇒ kk に変更 603// final int kk = key.lastIndexOf(FS); 604// if (kk > 0) { 605//// rtn = key.substring(key.lastIndexOf(FS) + 1); 606// rtn = key.substring(kk + 1); 607// } 608// return rtn; 609// } 610 611 /** 612 * ディレクトリ用のパス編集 613 * 614 * 後尾に「/」がない場合は、付与します。 615 * 616 * @og.rev 8.5.4.2 (2024/01/12) PMD 7.0.0 LinguisticNaming 対応 617 * 618 * @param path パス 619 * @return 後尾に「/」ありのパス 620 */ 621// protected String setDirTail(final String path) { 622 protected String addDirTail(final String path) { 623 if (StringUtil.isNull(path)) { return path; } 624 625 final StringBuilder sb = new StringBuilder(path); 626// if (!"/".equals(path.substring(path.length() - 1))) { 627 if ( FS != path.charAt(path.length() - 1) ) { 628 sb.append(FS); 629 } 630 return sb.toString(); 631 } 632 633// /** 634// * 右側トリム処理 635// * 636// * @og.rev 8.0.2.0 (2021/11/30) fukurou.util.rTrim(String,char) 使用 637// * 638// * 右側の文字が、指定の文字の場合、除去します。 639// * 640// * @param str 対象文字列 641// * @param chr 指定文字 642// * @return 右側から指定文字を除去後の文字列 643// */ 644// protected String rTrim(final String str, final char chr) { 645// String rtn = str; 646// int trgPos = 0; 647// for( int i = str.length() - 1; i >= 0; i--) { 648// if (str.charAt(i) == chr) { 649// trgPos = i; 650// // すべて合致した場合は、から文字を返す 651// if (trgPos == 0) { 652// rtn = ""; 653// } 654// } else { 655// break; 656// } 657// } 658// 659// if (trgPos > 0) { 660// rtn = str.substring(0, trgPos); 661// } 662// 663// return rtn; 664// } 665 666 /** 667 * ファイル区切り文字変換 668 * 669 * ファイル区切り文字を変換します。 670 * 671 * @og.rev 8.0.0.1 (2021/10/08) protected → private 672 * 673 * @param path 変換前文字列 674 * @return 返還後文字列 675 */ 676// protected String replaceFileSeparetor(final String path) { 677 private String replaceFileSeparetor(final String path) { 678 // 8.5.5.1 (2024/02/29) PMD 7.0.0 OnlyOneReturn メソッドには終了ポイントが 1 つだけ必要 679// if (StringUtil.isNull(path)) { 680// return ""; 681// } 682// return path.replaceAll("\\\\", "/"); 683 684 return StringUtil.isNull(path) ? "" : path.replaceAll("\\\\", "/"); 685 } 686 687 /** 688 * フィルター処理 689 * 690 * フィルター処理を行います。 691 * 692 * @param list フィルタを行うリスト 693 * @param filter フィルタ情報 694 * @return フィルタ後のリスト 695 */ 696 protected File[] filter(final List<File> list, final FileFilter filter) { 697 // 8.5.4.2 (2024/01/12) PMD 7.0.0 UseDiamondOperator 対応 698// final List<File> files = new ArrayList<File>(); 699 final List<File> files = new ArrayList<>(); 700 for( final File file : list ) { 701 if (filter.accept(file)) { 702 files.add(file); 703 } 704 } 705// return files.toArray(new File[files.size()]); 706 return files.toArray(new File[0]); // 8.5.4.2 (2024/01/12) PMD 7.0.0 OptimizableToArrayCall 対応 707 } 708 709 /** 710 * ストリームの変換処理 711 * 712 * InputStreamをbyte[]に変換。 713 * InputStreamのサイズ計算に利用。 714 * 715 * @param is byte配列変換するInputStream 716 * @return InpusStreamをbyte配列に変換した値 717 * @throws IOException ファイル関連エラー情報 718 */ 719 protected byte[] toByteArray(final InputStream is) throws IOException { 720 // 8.5.4.2 (2024/01/12) PMD 7.0.0 UseTryWithResources 対応 721// final ByteArrayOutputStream output = new ByteArrayOutputStream(); 722// try { 723 try ( ByteArrayOutputStream output = new ByteArrayOutputStream() ) { 724 // 7.2.9.4 (2020/11/20) Avoid variables with short names like b b → bt , n → no 725 final byte[] bt = new byte[BUFFER_SIZE]; 726 // 8.5.4.2 (2024/01/12) PMD 7.0.0 UnusedAssignment 727// int no = 0; 728 int no ; 729 while ((no = is.read(bt)) != -1) { 730 output.write(bt, 0, no); 731 } 732 return output.toByteArray(); 733 } 734// finally { 735// output.close(); 736// } 737 } 738 739// /** 740// * ローカル実行フラグ判定 741// * 742// * このabstract クラスの継承クラスはクラウド上で実行されるため、 743// * falseを返します。 744// * 745// * @return ローカル実行フラグ 746// */ 747// @Override 748// public boolean isLocal() { 749// return false; 750// } 751 752 // ************* 《File クラスの継承》************* 753 // ************* 《クラウド用ファイルクラスに未実装のメソッドの定義》************* 754 755 /** 756 * canExecuteの実行(Fileクラス) 757 * 758 * クラウド側では未実装のメソッドです。 759 * 760 * @return フラグ 761 * @see java.io.File#canExecute() 762 */ 763 @Override // File 764 public boolean canExecute() { 765 throw new RuntimeException(UNIMPLEMNTED_ERR); 766 } 767 768 /** 769 * deleteOnExitの実行(Fileクラス) 770 * 771 * クラウド側では未実装のメソッドです。 772 * 773 * @see java.io.File#deleteOnExit() 774 */ 775 @Override // File 776 public void deleteOnExit() { 777 throw new RuntimeException(UNIMPLEMNTED_ERR); 778 } 779 780 /** 781 * getAbsoluteFileの実行(Fileクラス) 782 * 783 * クラウド側では未実装のメソッドです。 784 * 785 * @return Fileオブジェクト 786 * @see java.io.File#getAbsoluteFile() 787 */ 788 @Override // File 789 public File getAbsoluteFile() { 790 throw new RuntimeException(UNIMPLEMNTED_ERR); 791 } 792 793 /** 794 * getFreeSpaceの実行(Fileクラス) 795 * 796 * クラウド側では未実装のメソッドです。 797 * 798 * @return 数値 799 * @see java.io.File#getFreeSpace() 800 */ 801 @Override // File 802 public long getFreeSpace() { 803 throw new RuntimeException(UNIMPLEMNTED_ERR); 804 } 805 806 /** 807 * getTotalSpaceの実行(Fileクラス) 808 * 809 * クラウド側では未実装のメソッドです。 810 * 811 * @return 数値 812 * @see java.io.File#getTotalSpace() 813 */ 814 @Override // File 815 public long getTotalSpace() { 816 throw new RuntimeException(UNIMPLEMNTED_ERR); 817 } 818 819 /** 820 * getUsableSpaceの実行(Fileクラス) 821 * 822 * クラウド側では未実装のメソッドです。 823 * 824 * @return 数値 825 * @see java.io.File#getUsableSpace() 826 */ 827 @Override // File 828 public long getUsableSpace() { 829 throw new RuntimeException(UNIMPLEMNTED_ERR); 830 } 831 832 /** 833 * isAbsoluteの実行(Fileクラス) 834 * 835 * クラウド側では未実装のメソッドです。 836 * 837 * @return フラグ 838 * @see java.io.File#isAbsolute() 839 */ 840 @Override // File 841 public boolean isAbsolute() { 842 throw new RuntimeException(UNIMPLEMNTED_ERR); 843 } 844 845 /** 846 * setReadableの実行(Fileクラス) 847 * 848 * クラウド側では未実装のメソッドです。 849 * 850 * @param readable フラグ 851 * @return フラグ 852 * @see java.io.File#setReadable(boolean) 853 */ 854 @Override // File 855 public boolean setReadable(final boolean readable) { 856 throw new RuntimeException(UNIMPLEMNTED_ERR); 857 } 858 859 /** 860 * setReadableの実行(Fileクラス) 861 * 862 * クラウド側では未実装のメソッドです。 863 * 864 * @param readable フラグ 865 * @param ownerOnly フラグ 866 * @return フラグ 867 * @see java.io.File#setReadable(boolean,boolean) 868 */ 869 @Override // File 870 public boolean setReadable(final boolean readable, final boolean ownerOnly) { 871 throw new RuntimeException(UNIMPLEMNTED_ERR); 872 } 873 874 /** 875 * setWritableの実行(Fileクラス) 876 * 877 * クラウド側では未実装のメソッドです。 878 * 879 * @param writable フラグ 880 * @return フラグ 881 * @see java.io.File#setWritable(boolean) 882 */ 883 @Override // File 884 public boolean setWritable(final boolean writable) { 885 throw new RuntimeException(UNIMPLEMNTED_ERR); 886 } 887 888 /** 889 * setWritableの実行(Fileクラス) 890 * 891 * クラウド側では未実装のメソッドです。 892 * 893 * @param writable フラグ 894 * @param ownerOnly フラグ 895 * @return フラグ 896 * @see java.io.File#setWritable(boolean,boolean) 897 */ 898 @Override // File 899 public boolean setWritable(final boolean writable, final boolean ownerOnly) { 900 throw new RuntimeException(UNIMPLEMNTED_ERR); 901 } 902 903 /** 904 * toURIの実行(Fileクラス) 905 * 906 * クラウド側では未実装のメソッドです。 907 * 908 * @return URI情報 909 * @see java.io.File#toURI() 910 */ 911 @Override // File 912 public URI toURI() { 913 throw new RuntimeException(UNIMPLEMNTED_ERR); 914 } 915}