J'ai essayé d'obtenir le chemin d'accès URI pour 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 mentionner le chemin absolu d'un fichier existant dans le dossier des ressources
Il n'y a pas de "chemin absolu pour un fichier existant dans le dossier des actifs". Le contenu du dossier assets/
de votre projet est conditionné dans le fichier APK. Utilisez un objet AssetManager
pour obtenir un InputStream
sur un actif.
Pour WebView
, vous pouvez utiliser le schéma file
Uri
de la même manière que vous utiliseriez une URL. La syntaxe des ressources est file:///Android_asset/...
(remarque: trois barres obliques), où Ellipsis est le chemin du fichier situé dans le dossier assets/
.
L'URL correcte est:
file:///Android_asset/RELATIVEPATH
où RELATIVEPATH est le chemin d'accès à votre ressource par rapport au dossier des actifs.
Note les 3/dans le schéma. La vue Web ne chargerait aucune de mes ressources sans 3. J'ai essayé 2 comme commenté (précédemment) par CommonsWare et cela ne fonctionnerait pas. Ensuite, j'ai regardé la source de CommonsWare sur github et remarqué la barre oblique supplémentaire.
Ces tests n'ont cependant été effectués que sur l'émulateur 1.6 Android, mais je doute que ce soit différent sur un périphérique réel ou une version ultérieure.
EDIT: CommonsWare a mis à jour sa réponse pour refléter ce changement minime. Donc, j'ai édité cela, donc cela a encore du sens avec sa réponse actuelle.
S'il vous plaît essayez ce code fonctionne bien
Uri imageUri = Uri.fromFile(new File("//Android_asset/luc.jpeg"));
/* 2) Create a new Intent */
Intent imageEditorIntent = new AdobeImageIntent.Builder(this)
.setData(imageUri)
.build();
Fonctionne pour WebView mais semble échouer sur URL.openStream()
. Vous devez donc distinguer les protocoles fichier: // et les gérer via AssetManager comme suggéré.
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;
Essayez ceci: ça marche
InputStream in_s = getClass().getClassLoader().getResourceAsStream("TopBrands.xml");
si vous avez une exception de valeur nulle, essayez celle-ci:
InputStream in_s1 = TopBrandData.class.getResourceAsStream("/assets/TopBrands.xml");
TopBranData est une classe
essaye ça :
Uri uri = Uri.parse("Android.resource://"+getPackageName()+"/"+R.raw.cat);
Je l'avais fait et cela a fonctionné
Enfin, j'ai trouvé un moyen d'obtenir le chemin d'un fichier présent dans les actifs à partir de this dans Kotlin. Ici, nous copions le fichier d’actifs dans le cache et obtenons le chemin d’accès à partir de ce fichier.
@Throws(IOException::class)
fun getFileFromAssets(context: Context, fileName: String): File = File(context.cacheDir, fileName)
.also {
it.outputStream().use { cache -> context.assets.open(fileName).use { it.copyTo(cache) } }
}
Obtenir le chemin du fichier comme:
val filePath = getFileFromAssets(context, "fileName.extension").absolutePath
Oui, vous ne pouvez pas accéder à votre dossier de lecteurs depuis votre téléphone Android ou votre émulateur, car votre ordinateur et Android sont deux systèmes d’exploitation différents. Je choisirais le dossier res de Android. _ parce qu'il a de bonnes méthodes de gestion des ressources. Jusqu'à ce que et à moins que vous n'ayez une très bonne raison de placer votre fichier dans le dossier des actifs. Au lieu de cela, vous pouvez le faire
try {
Resources res = getResources();
InputStream in_s = res.openRawResource(R.raw.yourfile);
byte[] b = new byte[in_s.available()];
in_s.read(b);
String str = new String(b);
} catch (Exception e) {
Log.e(LOG_TAG, "File Reading Error", e);
}