66import java .io .IOException ;
77import java .io .InputStream ;
88import java .io .OutputStream ;
9+ import java .io .PrintWriter ;
910import java .io .RandomAccessFile ;
1011import java .util .ArrayList ;
1112import java .util .List ;
@@ -89,11 +90,6 @@ public boolean rename(String name)
8990 return !newFile .exists () && file .renameTo (newFile );
9091 }
9192
92- public boolean isDirectory ()
93- {
94- return file .isDirectory ();
95- }
96-
9793 public List <Record > children ()
9894 {
9995 List <Record > result = new ArrayList <>();
@@ -122,6 +118,23 @@ public boolean isFile()
122118 return file .isFile ();
123119 }
124120
121+ public boolean isDirectory ()
122+ {
123+ return file .isDirectory ();
124+ }
125+
126+ public boolean create () throws IOException
127+ {
128+ if (isFile ())
129+ {
130+ return createFile ();
131+ }
132+ else
133+ {
134+ return createFolder ();
135+ }
136+ }
137+
125138 public boolean createFile () throws IOException
126139 {
127140 File parent = file .getParentFile ();
@@ -131,9 +144,7 @@ public boolean createFile() throws IOException
131144
132145 public boolean createFolder () throws IOException
133146 {
134- File parent = file .getParentFile ();
135-
136- return (parent .exists () || parent .mkdirs ());
147+ return (file .exists () || file .mkdirs ());
137148 }
138149
139150 public boolean copy (Record target ) throws IOException
@@ -156,43 +167,129 @@ private boolean copy(Record target, boolean delete) throws IOException
156167 if (isDirectory ())
157168 {
158169 Record targetFolder = new Record (target , name ());
159- targetFolder .createFolder ();
160-
161- boolean allCopied = true ;
162170
163- for ( Record record : children ())
171+ if ( targetFolder . createFolder ())
164172 {
165- allCopied &= record .copy (targetFolder , delete );
166- }
173+ boolean allCopied = true ;
167174
168- if (delete && allCopied )
169- {
170- return delete ();
175+ for (Record record : children ())
176+ {
177+ allCopied &= record .copy (targetFolder , delete );
178+ }
179+
180+ if (delete && allCopied )
181+ {
182+ return delete ();
183+ }
184+ else
185+ {
186+ return allCopied ;
187+ }
171188 }
172189 else
173190 {
174- return allCopied ;
191+ return false ;
175192 }
176193 }
177194 else
178195 {
179196 Record targetFile = new Record (target , name ());
180- targetFile .createFile ();
181197
182- InputStream input = new FileInputStream (file );
183- OutputStream output = new FileOutputStream (targetFile .file );
198+ if (targetFile .createFile ())
199+ {
200+ InputStream input = new FileInputStream (file );
201+ OutputStream output = new FileOutputStream (targetFile .file );
184202
185- Streams .copy (input , output );
203+ Streams .copy (input , output );
186204
187- return !delete || delete ();
205+ return !delete || delete ();
206+ }
207+ else
208+ {
209+ return false ;
210+ }
188211 }
189212 }
190213
191214 public boolean delete ()
215+ {
216+ if (isFile ())
217+ {
218+ return deleteFile ();
219+ }
220+ else
221+ {
222+ return deleteFolder ();
223+ }
224+ }
225+
226+ public boolean deleteFile ()
192227 {
193228 return file .exists () && file .delete ();
194229 }
195230
231+ public boolean deleteFolder ()
232+ {
233+ return file .exists () && empty () && file .delete ();
234+ }
235+
236+ public boolean empty ()
237+ {
238+ if (isFile ())
239+ {
240+ return emptyFile ();
241+ }
242+ else
243+ {
244+ return emptyFolder ();
245+ }
246+ }
247+
248+ public boolean emptyFile ()
249+ {
250+ try
251+ {
252+ PrintWriter writer = new PrintWriter (file );
253+ writer .close ();
254+
255+ return true ;
256+ }
257+ catch (Exception e )
258+ {
259+ return false ;
260+ }
261+ }
262+
263+ public boolean emptyFolder ()
264+ {
265+ return emptyFolder (file );
266+ }
267+
268+ private boolean emptyFolder (File root )
269+ {
270+ boolean allDeleted = true ;
271+
272+ File [] files = root .listFiles ();
273+
274+ if (files != null )
275+ {
276+ for (File file : files )
277+ {
278+ if (file .isDirectory ())
279+ {
280+ allDeleted &= emptyFolder (file );
281+ allDeleted &= file .delete ();
282+ }
283+ else
284+ {
285+ allDeleted &= file .delete ();
286+ }
287+ }
288+ }
289+
290+ return allDeleted ;
291+ }
292+
196293 public String string () throws IOException
197294 {
198295 return new String (bytes ());
0 commit comments