Начнём с удаления файлов:
public static void delete(String path_from) {
File f = new File(path_from);
if (f.isDirectory()) {
String[] child = f.list();
for (int i = 0; i < child.length; i++) {
delete(path_from + "/" + child[i]);
}
f.delete();
} else {
f.delete();
}
}
Это рекурсивный метод: Он вызывает сам себя для каждого вложенного файла или директории, а затем удаляет и саму директорию. файл он удаляет сразу.
Копирование реализуется ненамного сложнее:
public static void copy(String from, String to) throws FileNotFoundException, IOException {
String fname = from.substring(from.lastIndexOf("/") + 1);
File f = new File(from);
if (f.isDirectory()) {
if (new File(to + "/" + fname).exists()) {
throw new IOException("Directory " + to + "/" + fname + " already exists");
}
mkdir(to + "/" + fname);
String[] child = f.list();
for (int i = 0; i < child.length; i++) {
copy(from + "/" + child[i], to + "/" + fname);
}
} else {
if (new File(to + "/" + fname).exists()) {
throw new IOException("File " + to + "/" + fname + " already exists");
}
FileChannel srcChannel = new FileInputStream(f).getChannel();
FileChannel destChannel = new FileOutputStream(to + "/" + fname).getChannel();
srcChannel.transferTo(0, srcChannel.size(), destChannel);
}
}
Тут добавлены проверки на существование файла и директории перед их созданием. Копирование файла через
FileChannel
предпочтительнее ибо быстрее.
Приведите текст используемого Вами метода mkdir! Интересно посмотреть, т.к.следующий код не работает по причине отказа в доступе на Windows 8:
ОтветитьУдалитьString lcFolder = "C:/Program Files/Microsoft SQL Server/MSSQL11.SQLEXPRESS/MSSQL/DATA2/";
File f = new File(lcFolder);
f.mkdirs();