151

アセット ファイルの 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);
}

アセット フォルダに存在するファイルの絶対パスを指定する方法を教えてください。

4

11 に答える 11

175

「アセットフォルダーに存在するファイルの絶対パス」はありません。プロジェクトのassets/フォルダーのコンテンツは、APK ファイルにパッケージ化されています。AssetManagerオブジェクトを使用InputStreamしてアセットを取得します。

の場合、URL を使用するのとほぼ同じ方法でスキームをWebView使用できます。file Uriアセットの構文はfile:///android_asset/...(注: 3 つのスラッシュ) で、省略記号はassets/フォルダー内のファイルのパスです。

于 2011-01-27T19:31:10.413 に答える
78

正しいURLは次のとおりです。

file:///android_asset/RELATIVEPATH

ここで、RELATIVEPATHは、アセットフォルダーを基準にしたリソースへのパスです。

スキームの3/に注意してください。Webビューは、3がないとアセットをロードしませんでした。CommonsWareが(以前に)コメントしたように2を試しましたが、機能しませんでした。次に、githubでCommonsWareのソースを調べたところ、余分なスラッシュに気づきました。

このテストは1.6Androidエミュレーターでのみ実行されましたが、実際のデバイス以降のバージョンでは異なるとは思えません。

編集:CommonsWareは、この小さな変更を反映するように彼の答えを更新しました。だから私はこれを編集したので、彼の現在の答えでまだ意味があります。

于 2011-09-06T19:44:51.823 に答える
14

このコードが正常に動作することを試してください

 Uri imageUri = Uri.fromFile(new File("//android_asset/luc.jpeg"));

    /* 2) Create a new Intent */
    Intent imageEditorIntent = new AdobeImageIntent.Builder(this)
            .setData(imageUri)
            .build();
于 2017-01-04T07:12:26.767 に答える
7

ここに画像の説明を入力

アセットフォルダーを正しい位置に配置してください。

于 2016-05-31T12:22:39.460 に答える
6

WebView では機能しますが、 では失敗するようURL.openStream()です。したがって、 file:// プロトコルを区別し、提案どおりに AssetManager を介して処理する必要があります。

于 2011-09-03T17:14:48.373 に答える
3

これを試してみてください、うまくいきます:

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

Null Value Exception が発生した場合は、これを試してください ( class を使用TopBrandData):

InputStream in_s1 =
    TopBrandData.class.getResourceAsStream("/assets/TopBrands.xml");
于 2014-07-02T07:37:07.333 に答える
3
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;
}
于 2012-03-03T07:07:16.220 に答える
0

ええ、コンピューターとアンドロイドは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);
 }
于 2015-06-27T05:34:10.017 に答える
-8

私のために働いた このコードを試してください

   uri = Uri.fromFile(new File("//assets/testdemo.txt"));
   String testfilepath = uri.getPath();
    File f = new File(testfilepath);
    if (f.exists() == true) {
    Toast.makeText(getApplicationContext(),"valid :" + testfilepath, 2000).show();
    } else {
   Toast.makeText(getApplicationContext(),"invalid :" + testfilepath, 2000).show();
 }
于 2015-08-20T14:07:08.917 に答える