web-dev-qa-db-fra.com

Obtenez la taille du fichier dans Android sdk?

J'ai un problème pour obtenir la taille d'un fichier. J'ai le code suivant:

File file = new File("/sdcard/lala.txt");
long length = file.length();

Et toujours la longueur est zéro, oui zéro.

J'utilise Android SDK (vous ne savez pas quelle version)), le code s'exécute dans une activité, j'ai créé une carte SD.

Peut-être est-ce une question de permission? Y a-t-il quelque chose qui me manque?

70
chinanzio

La méthode File.length() renvoie ce qui suit selon le javadoc :

"Longueur, en octets, du fichier désigné par ce chemin abstrait, ou 0L si le fichier n'existe pas. Certains systèmes d'exploitation peuvent renvoyer 0L pour des noms de chemins indiquant des entités dépendant du système, telles que des périphériques. ou des tuyaux. "

Comme vous pouvez le constater, zéro peut être renvoyé:

  • si le fichier existe mais contient zéro octet.
  • si le fichier n'existe pas, ou
  • si le fichier est un fichier spécial spécifique au système d'exploitation.

Mon argent est sur le deuxième cas; c'est-à-dire que vous avez le mauvais nom de fichier/chemin d'accès. Essayez d'appeler File.exists() sur le nom du fichier pour voir ce que cela vous dit. Les deux autres cas sont possibles aussi, je suppose.

(Pour mémoire, la plupart des fichiers /proc/... Sur un système Linux ont également une taille apparente de fichier de zéro. Et Android est basé sur Linux.)

89
Stephen C

Si vous voulez obtenir la taille du dossier/fichier en termes de Kb ou Mb, utilisez le code suivant. Cela vous aidera à trouver la taille exacte de votre fichier.

public static String getFolderSizeLabel(File file) {
    long size = getFolderSize(file) / 1024; // Get size and convert bytes into Kb.
    if (size >= 1024) {
        return (size / 1024) + " Mb";
    } else {
        return size + " Kb";
    }
}

Cette fonction retournera la taille sous forme d'octets:

public static long getFolderSize(File file) {
    long size = 0;
    if (file.isDirectory()) {
        for (File child : file.listFiles()) {    
            size += getFolderSize(child);
        }
    } else {
        size = file.length();
    }
    return size;
}   
25
Pir Fahim Shah

Tu devrais utiliser:

File file = new File(Uri.parse("/sdcard/lala.txt").getPath());

au lieu de:

File file = new File("/sdcard/lala.txt");
4
KAMAL VERMA

Je vous suggère d'utiliser le code suivant au lieu de coder en dur le chemin ("/sdcard/lala.txt"):

File file = new File(Environment.getExternalStorageDirectory().getPath() + "/lala.txt");
file.length()
2
Karthik