Comment récursive de copier tout le répertoire, y compris le dossier parent en Java
Je suis actuellement en train de composer des dossiers d'un endroit à l'autre. Il travaille très bien, mais il n'est pas de la copie de l'original du dossier que tout le reste des fichiers et des dossiers sont en cours ainsi. C'est le code, je suis en utilisant:
public static void copyFolder(File src, File dest) throws IOException {
if (src.isDirectory()) {
//if directory not exists, create it
if (!dest.exists()) {
dest.mkdir();
}
//list all the directory contents
String files[] = src.list();
for (String file : files) {
//construct the src and dest file structure
File srcFile = new File(src, file);
File destFile = new File(dest+"\\"+src.getName(), file);
//recursive copy
copyFolder(srcFile,destFile);
}
} else {
//if file, then copy it
//Use bytes stream to support all file types
InputStream in = new FileInputStream(src);
OutputStream out = new FileOutputStream(dest);
byte[] buffer = new byte[1024];
int length;
//copy the file content in bytes
while ((length = in.read(buffer)) > 0){
out.write(buffer, 0, length);
}
in.close();
out.close();
System.out.println("File copied from " + src + " to " + dest);
}
}
Donc, j'ai le dossier src C:\test\mytest\..all folders..
Je veux le copier sur C:\test\myfiles
Mais au lieu d'obtenir C:\test\myfiles\mytest\..all folders..
im obtenir C:\test\myfiles\..all folders..
Vous devez vous connecter pour publier un commentaire.
Essayez d'utiliser le copyDirectory(Fichier srcDir, Fichier destDir) méthode de la Apache Commons IO bibliothèque la place.
Il y a un tutoriel pour la copie de fichiers à l'aide de java.nio avec une copie récursive exemple de code sur Oracle Docs. Il fonctionne avec java se 7+. Il utilise des Fichiers.walkFileTree méthode, qui pourrait causer quelques problèmes sur le système ntfs avec des points de jonction. Pour éviter d'utiliser des Fichiers.walkFileTree, la solution peut ressembler à:
Vous pouvez essayer Apache FileUtils de copier les répertoires ainsi
Vous devriez essayer apache commons FileUtils
À l'aide de java.nio:
Et bien sûr printemps a qui couvrait également avec FileSystemUtils.copyRecursively(Fichier src, Fichier dest)
Le principal problème est: est-ce
seulement de créer un répertoire, pas le parent de l'un, et après la première étape, vous devrez créer deux répertoires, afin de remplacer
mkdir
avecmkdirs
.Après cela, je suppose que vous allez avoir de doublons enfant répertoires en raison de votre récursivité (quelque chose comme C:\test\myfiles\mytest\dir1\dir1\subdir1\subdir1...), donc aussi essayer de les corriger ces lignes:
Ce code copies d'un dossier à partir de la source à la destination: