001package org.opengion.fukurou.model;
002
003import java.io.FileNotFoundException;
004import java.io.IOException;
005import java.io.InputStream;
006
007/**
008 * ファイル操作のインタフェース
009 * 
010 * ローカルサーバ、クラウドストレージ(AWS,AZURE,BLUEMIX,ORACLE)のファイル操作用です。
011 * FileOperationFactoryを通して、インスタンスを生成可能です。
012 * 
013 * @og.group ファイル操作
014 *
015 * @og.rev 5.10.8.0 (2019/02/01) 新規作成
016 * @author oota
017 * @since       JDK7.0
018 */
019public interface FileOperation {
020        /**
021         * InputStreamのデータを書き込みます。
022         * 
023         * @param is 書き込みデータのInputStream
024         * @throws IOException
025         */
026        public void write(InputStream is) throws IOException;
027
028        /**
029         * データを読み込み、InputStreamとして、返します。
030         * 
031         * @return 読み込みデータのInputStream
032         * @throws FileNotFoundException
033         */
034        public InputStream read() throws FileNotFoundException;
035
036        /**
037         * ファイルを削除します。
038         * 
039         * @return 成否フラグ
040         */
041        public boolean delete();
042
043        /**
044         * ファイルを指定先に、コピーします。
045         * 
046         * @param afPath コピー先
047         * @return 成否フラグ
048         */
049        public boolean copy(String afPath);
050
051        /**
052         * ファイルを指定先に、移動します。
053         * 
054         * @param afPath 移動先
055         * @return 成否フラグ
056         */
057        public boolean move(String afPath);
058
059        /**
060         * 設定パスを取得します。
061         * 
062         * @return 設定パス
063         */
064        public String getPath();
065
066        /**
067         * 絶対パスを取得します。
068         * 
069         * @return 絶対パス
070         */
071        public String getAbsolutePath();
072
073        /**
074         * 名称を取得します。
075         * 
076         * @return 名称
077         */
078        public String getName();
079
080        /**
081         * 親のパスを取得します。
082         * 
083         * @return 親のパス
084         */
085        public String getParent();
086
087        /**
088         * ファイルサイズを返します
089         * 
090         * @return ファイルサイズ
091         */
092        public long length();
093
094        /**
095         * 最終更新時刻を取得します。
096         * 
097         * @return 最終更新時刻
098         */
099        public long lastModified();
100
101        /**
102         * ファイルの場合は、trueを返します。
103         * 
104         * @return ファイルフラグ
105         */
106        public boolean isFile();
107
108        /**
109         * ディレクトリの場合は、trueを返します。
110         * 
111         * @return ディレクトリフラグ
112         */
113        public boolean isDirectory();
114
115        /**
116         * 存在する場合は、trueを返します。
117         * 
118         * @return 存在フラグ
119         */
120        public boolean exists();
121
122        /**
123         * パスのファイルとディレクトリ一覧を取得します。
124         * 
125         * @return ファイルとティレクトリ一覧
126         */
127        public FileOperation[] listFiles();
128
129        /**
130         * パスのファイルとディレクトリ一覧を取得して、
131         * 引数でフィルターを行います。
132         * 
133         * @param filter フィルター
134         * @return      ファイルとディレクトリ一覧
135         */
136        public FileOperation[] listFiles(FileOperationFileFilter filter);
137
138        /**
139         * ディレクトリを作成します。
140         * 
141         * ※1つのディレクトリのみ作成します。
142         * (クラウドストレージにはディレクトリの概念が無いため、
143         * 作成は行わず、trueを返します)
144         * 
145         * @return 成否フラグ
146         */
147        public boolean mkdir();
148
149        /**
150         * ディレクトリを作成します。
151         * 
152         * ※複数のディレクトリを作成します。
153         * (クラウドストレージにはディレクトリの概念が無いため、
154         * 作成は行わず、trueを返します)
155         * 
156         * @return 成否フラグ
157         */
158        public boolean mkdirs();
159
160        /**
161         * 指定のファイル情報のファイル名に変更します。
162         * 
163         * @param dest 変更後のファイル情報
164         * @return 成否フラグ
165         */
166        public boolean renameTo(FileOperation dest);
167
168        /**
169         * 親のディレクトリを返します。
170         * 
171         * @return 親のディレクトリ
172         */
173        public FileOperation getParentFile();
174
175        /**
176         * 書き込み可能フラグ
177         * 
178         * ※クラウドストレージの場合は、
179         * 必ずtrueを返します。
180         * 
181         * @return 書き込み可能フラグ
182         */
183        public boolean canWrite();
184
185        /**
186         * 読み取り可能フラグ
187         * 
188         * ※クラウドストレージの場合は、
189         * 必ずtrueを返します。
190         * 
191         * @return 読み取り可能フラグ
192         */
193        public boolean canRead();
194
195        /**
196         * 隠しファイルフラグ
197         * 
198         * ※クラウドストレージの場合は、
199         * 必ずfalseを返します。
200         * 
201         * @return 隠しファイルフラグ
202         */
203        public boolean isHidden();
204
205        /**
206         * 新規ファイル作成
207         * 
208         * 既にファイルが存在しない場合のみ、
209         * 空のファイルを作成します。
210         *
211         * @return 成否フラグ
212         * @throws IOException
213         */
214        public boolean createNewFile() throws IOException;
215
216        /**
217         * 最終更新時刻の更新
218         * 
219         * 最終更新時刻の更新を行います。
220         * ※クラウドストレージの場合は、
221         * 最終更新時刻の更新を行えません。
222         * 
223         * @param time 更新する最終更新時刻
224         * @return 成否フラグ
225         */
226        public boolean setLastModified(long time);
227
228        /**
229         * カノニカルファイル情報を取得します。
230         * 
231         * ※ローカルサーバのみ通常ファイルと、
232         * カノニカルファイルで異なります。
233         * 
234         * @return カノニカルファイル情報
235         * @throws IOException
236         */
237        public FileOperation getCanonicalFile() throws IOException;
238}