web-dev-qa-db-fra.com

Copier des fichiers d'un dossier de la carte SD dans un autre dossier de la carte SD

Est-il possible de copier un dossier présent dans sdcard dans un autre dossier présentant la même carte sd par programmation ??

Si oui, comment faire ça?

18
Siva Kumar

Une version améliorée de cet exemple:

// If targetLocation does not exist, it will be created.
public void copyDirectory(File sourceLocation , File targetLocation)
throws IOException {

    if (sourceLocation.isDirectory()) {
        if (!targetLocation.exists() && !targetLocation.mkdirs()) {
            throw new IOException("Cannot create dir " + targetLocation.getAbsolutePath());
        }

        String[] children = sourceLocation.list();
        for (int i=0; i<children.length; i++) {
            copyDirectory(new File(sourceLocation, children[i]),
                    new File(targetLocation, children[i]));
        }
    } else {

        // make sure the directory we plan to store the recording in exists
        File directory = targetLocation.getParentFile();
        if (directory != null && !directory.exists() && !directory.mkdirs()) {
            throw new IOException("Cannot create dir " + directory.getAbsolutePath());
        }

        InputStream in = new FileInputStream(sourceLocation);
        OutputStream out = new FileOutputStream(targetLocation);

        // Copy the bits from instream to outstream
        byte[] buf = new byte[1024];
        int len;
        while ((len = in.read(buf)) > 0) {
            out.write(buf, 0, len);
        }
        in.close();
        out.close();
    }
}

Vous obtenez une meilleure gestion des erreurs et de meilleurs traitements si le fichier cible transmis se trouve dans un répertoire qui n'existe pas.

37
Ne0

Voir l'exemple ici . La carte SD est un stockage externe, vous pouvez donc y accéder via getExternalStorageDirectory .

15
Vladimir Ivanov

oui, il est possible et im en utilisant la méthode ci-dessous dans mon code. J'espère utiliser plein pour vous: -

public static void copyDirectoryOneLocationToAnotherLocation(File sourceLocation, File targetLocation)
        throws IOException {

    if (sourceLocation.isDirectory()) {
        if (!targetLocation.exists()) {
            targetLocation.mkdir();
        }

        String[] children = sourceLocation.list();
        for (int i = 0; i < sourceLocation.listFiles().length; i++) {

            copyDirectoryOneLocationToAnotherLocation(new File(sourceLocation, children[i]),
                    new File(targetLocation, children[i]));
        }
    } else {

        InputStream in = new FileInputStream(sourceLocation);

        OutputStream out = new FileOutputStream(targetLocation);

        // Copy the bits from instream to outstream
        byte[] buf = new byte[1024];
        int len;
        while ((len = in.read(buf)) > 0) {
            out.write(buf, 0, len);
        }
        in.close();
        out.close();
    }

}
4
duggu

Pour déplacer des fichiers ou des répertoires, vous pouvez utiliser la fonction File.renameTo(String path)

File oldFile = new File (oldFilePath);
oldFile.renameTo(newFilePath);
0
Amjad Abu Saa