Eu tenho tentado obter o caminho do URI para um arquivo de ativos.
uri = Uri.fromFile(new File("//assets/mydemo.txt"));
Quando verifico se o arquivo existe, vejo que ele não existe
File f = new File(filepath);
if (f.exists() == true) {
Log.e(TAG, "Valid :" + filepath);
} else {
Log.e(TAG, "InValid :" + filepath);
}
Alguém pode me dizer como posso mencionar o caminho absoluto para um arquivo existente na pasta do ativo
file://android_asset/...
, onde...
é o caminho relativo noassets/
diretório do seu projeto .file://android_asset/
, embora não seja paraUri
: github.com/commonsguy/cw-advandroid/tree/master/WebView/GeoWeb1file:///
.new File("file:///android_asset/sounds/beep.mid");
, mas o arquivo de resultado não existe. Alguma ideia? O arquivo PS está naassets/sounds/
pastaO URL correto é:
em que RELATIVEPATH é o caminho para o seu recurso em relação à pasta de ativos.
Observe os 3 / 's no esquema. A exibição na Web não carregaria nenhum dos meus ativos sem o 3. Tentei o 2 como (anteriormente) comentado pelo CommonsWare e não funcionou. Então olhei a fonte do CommonsWare no github e notei a barra extra para a frente.
Este teste, porém, foi feito apenas no emulador Android 1.6, mas duvido que seja diferente em um dispositivo real ou em uma versão superior.
EDIT: O CommonsWare atualizou sua resposta para refletir essa pequena alteração. Então, eu editei isso para que ainda faça sentido com a resposta atual.
fonte
String fileName = "file:///android_asset/file.csv";
System.out.println(new File(fileName).exists()); // prints false
File
que aceita uma string está esperando um caminho e não um URI . Não codifico para o Android há alguns anos e as coisas podem ter mudado. Não tenho certeza se você pode acessar a pasta de ativos incorporados usando uma classe Java normal. Parece que me lembro que você precisa usar um AssetManager . Os arquivos na pasta de ativos são colocados no dispositivo no APK empacotado somente leitura e compactados (APKs são, na verdade, arquivos zip), portanto, é mais trabalhoso lê-lo novamente. Tente algo comonew File(new URI(filename))
Por favor, tente este código funcionando bem
fonte
Por fim, encontrei uma maneira de obter o caminho de um arquivo presente nos ativos a partir desta resposta no Kotlin. Aqui, estamos copiando o arquivo de ativos para o cache e obtendo o caminho do arquivo desse arquivo de cache.
Obtenha o caminho para o arquivo como:
fonte
fileName
diretório tiverdir/file
. Ele falhará com o caminho quecache/dir/file
não existe. Também acho melhor ter uma verificaçãoif(!it.exist)
no interior doalso
bloco, então ele não irá copiar o arquivo de cada vez até mesmo o arquivo já está em cacheif(!it.exist)
lança uma referência não resolvida de erro. qualquer solução ?if(!it.exist)
deveria colocar antesit.outputStream()
...Certifique-se de que sua pasta de ativos esteja na posição correta.
fonte
sourceSets { main { assets.srcDirs = ['src/main/assets'] } }
Funciona para o WebView, mas parece falhar
URL.openStream()
. Portanto, você precisa distinguir os protocolos file: // e manipulá-los via AssetManager, conforme sugerido.fonte
Experimente isso, funciona:
Se você receber uma exceção de valor nulo, tente o seguinte (com classe
TopBrandData
):fonte
fonte
tente isto:
Eu tinha feito e funcionou
fonte
Sim, você não pode acessar a pasta da unidade a partir do seu telefone ou emulador Android, porque o seu computador e o Android são dois sistemas operacionais diferentes. Eu iria para a pasta res do Android, porque possui bons métodos de gerenciamento de recursos. Até e a menos que você tenha um bom motivo para colocar seu arquivo na pasta de ativos. Em vez disso, você pode fazer isso
fonte
Trabalhou para mim Experimente este código
fonte