
Quando colocamos por exemplo um arquivo txt dentro da pasta “src/Files/meuarquivo.txt” de nosso projeto, um erro bem comum é que ao sermos influenciados pela lógica vamos capturar esse arquivos através de new File(“src/Files/meuarquivo.txt”) em algum lugar de nosso código Java. Primeiramente, obviamente o nosso código Java que captura esse arquivo será executado após ser compilado, e após a compilação nosso arquivo “meuarquivo.txt” não estará mais dentro da pasta “src” e seu novo caminho será “bin/Files/myfile.txt”, já que código compilado vai para a pasta “bin” de nosso projeto.
Em segundo lugar, para evitar esse problema da localização real do arquivo, podemos usar a chamada de getClass().getResource(“/Files/meuarquivo.txt”) ou getClass().getResourceAsStream(“/Files/meuarquivo.txt”), e o contexto será responsável por apresentar o caminho completo, já que é a instância que contém informações sobre o ambiente. Outro meio também de capturar os arquivos é colocando-os em uma pasta tipo raw dentro da pasta “res” (e.g. “res/raw/meuarquivo.txt”) e capturando através de context.getResources().openRawResource(R.raw.meuarquivo) como no exemplo completo abaixo:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
InputStream inputStream = context.getResources().openRawResource(R.raw.meuarquivo); | |
DataInputStream dataInputStream = new DataInputStream(inputStream); | |
byte [] fileBytes = new byte [(int) inputStream.available()]; | |
dataInputStream.readFully(fileBytes); | |
dataInputStream.close(); |
Veja uma discussão sobre esse tema em http://stackoverflow.com/a/2851056