J'ai essayé d'obtenir le chemin URI d'un fichier d'actif.
uri = Uri.fromFile(new File("//assets/mydemo.txt"));
Quand je vérifie si le fichier existe, je vois que ce fichier n'existe pas
File f = new File(filepath);
if (f.exists() == true) {
Log.e(TAG, "Valid :" + filepath);
} else {
Log.e(TAG, "InValid :" + filepath);
}
Quelqu'un peut-il me dire comment je peux mentionner le chemin absolu d'un fichier existant dans le dossier d'actifs
file://android_asset/...
, où...
est le chemin relatif dans leassets/
répertoire de votre projet .file://android_asset/
, mais pas pourUri
: github.com/commonsguy/cw-advandroid/tree/master/WebView/GeoWeb1file:///
.new File("file:///android_asset/sounds/beep.mid");
, mais le fichier de résultat n'existe pas. Des idées? Le fichier PS est dans leassets/sounds/
dossier.L'URL correcte est:
où RELATIVEPATH est le chemin d'accès à votre ressource par rapport au dossier des actifs.
Notez les 3 / dans le schéma. La vue Web ne chargerait aucun de mes actifs sans le 3. J'ai essayé 2 comme (précédemment) commenté par CommonsWare et cela ne fonctionnerait pas. Ensuite, j'ai regardé la source de CommonsWare sur github et j'ai remarqué la barre oblique supplémentaire.
Ce test n'a cependant été effectué que sur l'émulateur Android 1.6, mais je doute que ce soit différent sur un appareil réel ou une version supérieure.
EDIT: CommonsWare a mis à jour sa réponse pour refléter ce petit changement. J'ai donc édité ceci pour que cela ait toujours du sens avec sa réponse actuelle.
la source
String fileName = "file:///android_asset/file.csv";
System.out.println(new File(fileName).exists()); // prints false
File
qui accepte une chaîne attend un chemin pas un URI . Je n'ai pas codé pour Android depuis quelques années et les choses ont peut-être changé. Je ne sais pas si vous pouvez accéder au dossier des actifs intégrés à l'aide d'une classe de fichier Java normale. Il me semble que vous devez utiliser un AssetManager . Les fichiers dans le dossier des ressources sont placés sur l'appareil dans l'APK en lecture seule et compressés (les APK sont en fait des fichiers zip), donc plus de travail pour le relire. Essayez quelque chose commenew File(new URI(filename))
Veuillez essayer que ce code fonctionne correctement
la source
Enfin, j'ai trouvé un moyen d'obtenir le chemin d'un fichier présent dans les actifs à partir de cette réponse dans Kotlin. Ici, nous copions le fichier de ressources dans le cache et obtenons le chemin du fichier à partir de ce fichier de cache.
Obtenez le chemin d'accès au fichier comme:
la source
fileName
répertoire havedir/file
. Il plantera avec le chemin quicache/dir/file
n'existe pas. Aussi, je pense qu'il vaut mieux avoir une vérificationif(!it.exist)
à l'intérieur dualso
bloc, alors il ne copiera pas le fichier à chaque fois que même le fichier est déjà sur le cacheif(!it.exist)
lance une référence d'erreur non résolue. Toute solution ?if(!it.exist)
faudrait mettre avantit.outputStream()
...Assurez-vous que votre dossier de ressources est placé dans la bonne position.
la source
sourceSets { main { assets.srcDirs = ['src/main/assets'] } }
Fonctionne pour WebView mais semble échouer
URL.openStream()
. Vous devez donc distinguer les protocoles file: // et les gérer via AssetManager comme suggéré.la source
Essayez ceci, cela fonctionne:
Si vous obtenez une exception de valeur nulle, essayez ceci (avec classe
TopBrandData
):la source
la source
essaye ça :
Je l'avais fait et ça a marché
la source
Oui, vous ne pouvez pas accéder à votre dossier de lecteur à partir de votre téléphone ou de votre émulateur Android, car votre ordinateur et Android sont deux systèmes d'exploitation différents.Je choisirais le dossier res d'Android car il dispose de bonnes méthodes de gestion des ressources. Jusqu'à et à moins que vous n'ayez de très bonnes raisons de placer votre fichier dans le dossier des actifs. Au lieu de cela, vous pouvez le faire
la source
A travaillé pour moi Essayez ce code
la source