アセットファイルのURIパスを取得しようとしています。
uri = Uri.fromFile(new File("//assets/mydemo.txt"));
ファイルが存在するかどうかを確認すると、ファイルが存在しないことがわかります
File f = new File(filepath);
if (f.exists() == true) {
Log.e(TAG, "Valid :" + filepath);
} else {
Log.e(TAG, "InValid :" + filepath);
}
アセットフォルダーに存在するファイルの絶対パスに言及する方法を教えてください
「アセットフォルダーに存在するファイルの絶対パス」はありません。プロジェクトのassets/
フォルダーのコンテンツはAPKファイルにパッケージ化されています。 AssetManager
オブジェクトを使用して、アセットのInputStream
を取得します。
WebView
の場合、URLを使用するのとほぼ同じ方法でfile
Uri
スキームを使用できます。アセットの構文はfile:///Android_asset/...
(注:3つのスラッシュ)です。ここで、省略記号はassets/
フォルダー内からのファイルのパスです。
正しいURLは次のとおりです。
file:///Android_asset/RELATIVEPATH
ここで、RELATIVEPATHは、アセットフォルダーを基準としたリソースへのパスです。
注スキームの3 /。 Webビューは、3なしではアセットをロードしません。CommonsWareが(以前)コメントしたように2を試しましたが、機能しませんでした。それからgithubでCommonsWareのソースを見て、余分なスラッシュに気付きました。
ただし、このテストは1.6 Androidエミュレーターでのみ行われましたが、実際のデバイスまたはそれ以降のバージョンでは異なると思います。
編集:CommonsWareは、この小さな変更を反映するために回答を更新しました。だから私はこれを編集したので、彼の現在の答えでそれが意味をなすようになった。
正常に動作するこのコードを試してください
Uri imageUri = Uri.fromFile(new File("//Android_asset/luc.jpeg"));
/* 2) Create a new Intent */
Intent imageEditorIntent = new AdobeImageIntent.Builder(this)
.setData(imageUri)
.build();
WebViewで動作しますが、URL.openStream()
で失敗するようです。そのため、file://プロトコルを区別し、推奨されるようにAssetManagerで処理する必要があります。
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;
これを試してください:それは動作します
InputStream in_s = getClass().getClassLoader().getResourceAsStream("TopBrands.xml");
null値の例外がある場合は、これを試してください。
InputStream in_s1 = TopBrandData.class.getResourceAsStream("/assets/TopBrands.xml");
TopBranDataはクラスです
これを試して :
Uri uri = Uri.parse("Android.resource://"+getPackageName()+"/"+R.raw.cat);
私はそれをやったし、それは働いた
最後に、アセットに存在するファイルのパスをKotlinの this answerから取得する方法を見つけました。ここでは、アセットファイルをキャッシュにコピーし、そのキャッシュファイルからファイルパスを取得しています。
@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) } }
}
次のようなファイルへのパスを取得します。
val filePath = getFileFromAssets(context, "fileName.extension").absolutePath
あなたのコンピューターとAndroidは2つの異なるOSであるため、あなたはAndroid電話またはエミュレーターからドライブフォルダーにアクセスできません。Androidのresフォルダーに行きます_優れたリソース管理方法があるため。アセットフォルダーにファイルを配置する非常に正当な理由がない限り。代わりにこれを行うことができます
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);
}