Skip to content

Commit 93abb4e

Browse files
Improved Record class
1 parent 06f9803 commit 93abb4e

1 file changed

Lines changed: 120 additions & 23 deletions

File tree

src/main/java/com/mauriciotogneri/javautils/Record.java

Lines changed: 120 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import java.io.IOException;
77
import java.io.InputStream;
88
import java.io.OutputStream;
9+
import java.io.PrintWriter;
910
import java.io.RandomAccessFile;
1011
import java.util.ArrayList;
1112
import 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

Comments
 (0)