143 votes

Comment obtenir de l'URI de la un atout de Fichier?

J'ai essayé d'obtenir le chemin de l'URI d'une ressource de fichier.

uri = Uri.fromFile(new File("//assets/mydemo.txt"));

Lorsque je vérifie si le fichier existe, je vois que le fichier n'existe pas

File f = new File(filepath);
   if (f.exists() == true) {
    Log.e(TAG, "Valid :" + filepath);
   } else {
    Log.e(TAG, "InValid :" + filepath);
   }

Peut-on me dire comment je peux mentionner le chemin absolu vers un fichier existant dans le dossier actif

171voto

CommonsWare Points 402670

Il n'y a pas de "chemin absolu vers un fichier existant dans le dossier". Le contenu de votre projet assets/ le dossier sont emballés dans le fichier APK. Utiliser un AssetManager objet pour obtenir un InputStream sur un actif.

MODIFIER

Pour réparer l'un de mes commentaires ci-dessous, la syntaxe d'URL pour les actifs est - file:///android_asset/... (note: trois barres obliques).

77voto

Russ Points 982

La bonne url est:

file:///android_asset/RELATIVEPATH

où RELATIVEPATH est le chemin d'accès à vos ressources par rapport au dossier des actifs.

Note 3 /'s dans le schéma. Affichage Web ne se charge pas tout de mes biens sans le 3. J'ai essayé 2 (précédemment) commenté par CommonsWare et ça ne marcherait pas. Puis j'ai regardé à CommonsWare la source sur github et il a remarqué supplémentaire barre oblique.

Ce test mais n'a été effectuée que sur la 1.6 émulateur Android, mais je doute de ses différents sur un périphérique réel ou version supérieure.

EDIT: CommonsWare mis à jour sa réponse afin de refléter ce changement minuscule. Donc j'ai édité ce donc il a encore un sens avec sa réponse.

6voto

Gaylord Zach Points 71

Fonctionne pour WebView mais semble échouer sur URL.openStream(). Si vous avez besoin de distinguer file:// protocoles et de les gérer via d'assetmanager comme le suggère.

4voto

Jaspreet Singh Points 11

Essayez ceci : il fonctionne

InputStream in_s = getClass().getClassLoader().getResourceAsStream("TopBrands.xml");

si vous avez de la valeur null exception essayez celui-ci:

InputStream in_s1 =   TopBrandData.class.getResourceAsStream("/assets/TopBrands.xml");

TopBranData est une Classe

3voto

jayesh kavathiya Points 1346
InputStream is = getResources().getAssets().open("terms.txt");
    String textfile = convertStreamToString(is);

public static String convertStreamToString(InputStream is)
            throws IOException {
            Writer writer = new StringWriter();

            char[] buffer = new char[2048];
            try {
                Reader reader = new BufferedReader(new InputStreamReader(is,
                        "UTF-8"));
                int n;
                while ((n = reader.read(buffer)) != -1) {
                    writer.write(buffer, 0, n);
                }
            } finally {
                is.close();
            }
            String text = writer.toString();
            return text;

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X