2011-01-27 11 views
86

Ho cercato di ottenere il percorso URI per un file di asset.Come ottenere URI da un file di asset?

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

Quando controllo se il file esiste vedo che il file non esiste

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

qualcuno può dirmi come posso citare il percorso assoluto di un file esistente nella cartella di asset

risposta

118

Non esiste un "percorso assoluto per un file esistente nella cartella delle risorse". Il contenuto della cartella assets/ del tuo progetto è contenuto nel file APK. Utilizzare un oggetto AssetManager per ottenere un valore InputStream su un asset.

EDIT

Per riparare uno dei miei commenti qui sotto, la sintassi URL per le attività è file:///android_asset/... (nota: tre barre).

+0

Il motivo per cui ho voluto un percorso assoluto era che volevo un URI per il file. – Titus

+23

'file: // android_asset/...', dove '...' è il percorso relativo all'interno della directory 'assets /' del tuo progetto. – CommonsWare

+0

Ho provato e ho ancora come percorso non valido. Ho verificato che l'apk contiene il file txt nella sua cartella di risorse – Titus

6

Funziona per WebView ma sembra non funzionare su URL.openStream(). Quindi è necessario distinguere i protocolli di file: // e gestirli tramite AssetManager come suggerito.

58

l'URL corretto è:

file:///android_asset/RELATIVEPATH 

dove relativePath è il percorso della risorsa relativo alla cartella asset.

Nota 3/'s nello schema. La visualizzazione Web non caricava nessuno dei miei asset senza il 3. Ho provato 2 come (precedentemente) commentato da CommonsWare e non funzionava. Poi ho guardato la fonte di CommonsWare su github e ho notato la barra extra in avanti.

Questo test è stato eseguito solo sull'emulatore Android 1.6, ma dubito che sia diverso su un dispositivo reale o una versione successiva.

MODIFICA: CommonsWare ha aggiornato la sua risposta per riflettere questo piccolo cambiamento. Così ho modificato questo, quindi ha ancora senso con la sua risposta attuale.

2
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; 
-2

provare questo:

Uri uri = Uri.parse("android.resource://"+getPackageName()+"/"+R.raw.cat); 

avevo fatto e ha funzionato

+2

In realtà funziona. Controllare [ContentResolver.openAssetFileDescriptor] (https://developer.android.com/reference/android/content/ContentResolver.html#openAssetFileDescriptor (android.net.Uri% 2C% 20java.lang.String)) –

4

Prova questo: funziona

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

se avete eccezione valore nullo provare questo :

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

TopBranData è una classe

+0

Se non funziona, si prega di Prova questo: InputStream in_s1 = TopBrandData.class.getResourceAsStream ("/ assets/TopBrands.xml"); –

0

Sì non è possibile accedere alla propria cartella di auto da voi telefono Android o un emulatore perché il computer e Android sono due diversi OS.I sarebbe andato per la cartella res di Android, perché ha buone risorse gestione metodi. Fino a quando ea meno di avere una buona ragione per mettere il file nella cartella delle risorse.Invece si può fare

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); 
} 
-2

Ha lavorato per me provare questo codice

uri = Uri.fromFile(new File("//assets/testdemo.txt")); 
    File f = new File(testfilepath); 
    if (f.exists() == true) { 
    Toast.makeText(getApplicationContext(),"valid :" + testfilepath, 2000).show(); 
    } else { 
    Toast.makeText(getApplicationContext(),"invalid :" + testfilepath, 2000).show(); 
} 
6

enter image description here

Essere sicuri, il vostro patrimonio cartella delle messe in posizione corretta.

3

Si prega di provare questo codice funziona bene

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

    /* 2) Create a new Intent */ 
    Intent imageEditorIntent = new AdobeImageIntent.Builder(this) 
      .setData(imageUri) 
      .build(); 
Problemi correlati