package org.jboss.tools.windup.core.utils;
import java.io.File;
/**
* <p>
* Useful file utilities.
* </p>
*/
public class FileUtils
{
/**
* Delete the file or directory, recursively if specified.
*/
public static boolean delete(File file, final boolean recursive)
{
boolean result = false;
if (recursive)
{
result = deleteRecursive(file, true);
}
else
{
if ((file.listFiles() != null) && (file.listFiles().length != 0))
{
throw new RuntimeException("directory not empty"); //$NON-NLS-1$
}
if (isWindows())
{
System.gc(); // ensure no lingering handles that would prevent
// deletion
}
result = file.delete();
}
return result;
}
private static boolean isWindows()
{
return System.getProperty("os.name").startsWith("Windows"); //$NON-NLS-1$ //$NON-NLS-2$
}
private static boolean deleteRecursive(final File file,
final boolean collect)
{
boolean result = true;
if (collect && isWindows())
{
System.gc(); // ensure no lingering handles that would prevent deletion
}
File[] children = file.listFiles();
if (children != null)
{
for (File sf : children)
{
if (sf.isDirectory())
{
if (!deleteRecursive(sf, false))
result = false;
}
else
{
if (!sf.delete())
result = false;
}
}
}
return file.delete() && result;
}
}