Como descompactar arquivo .gz no Android

oraculum

Tagged: ,

Android-1.6-sdk-download-update

Você pode precisar carregar alguns arquivos na sua APP como por exemplo uma lista de todas as cidades e estados do brasil ou um banco com os ceps para isso você pode manter esses arquivos compactados em um arquivo .gz para não pessar muito na hora da instalação e dentro do projeto, daí na hora de fazer a instalação você  descompacta esses arquivos na memoria e faz a inclusão deles no banco de dados principal.

No meu caso tenho um arquivo compactado chamado de municipios.gz, você pode colocar esses arquivos dentro da pasta ‘res’ do seu  projeto aconselho criar uma sub-pasta chamada ‘raw’ e deixar esses arquivos lá.

Importante: Não sei porque mas a SDK do android acusa o arquivo ‘.gz’ como inexistente  nesse caso é só você salvar o arquivo sem a extensão .gz depois de copiar para a pasta renomeie o mesmo no eclipse e tire a extensão. Fique tranquilo que de alguma forma a SDK sabe que ele é um .gz e vai descompacta-lo normalmente.

erro ao tentar acessar um arquivo com a extensão .gz na pasta res/raw

file 02-27 00:53:38.809: E/AndroidRuntime(399): Caused by: android.content.res.Resources$NotFoundException: File res/raw/municipios.gz from drawable resource ID #0x7f040001

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public JSONArray loadFile() throws IOException, JSONException {
		// pegando o arquivo gz da pasta res/raw e descompactando
		InputStream json = new GZIPInputStream(
				getHelper().getContext().getResources().openRawResource(R.raw.municipios));
 
		// lendo o arquivo json e retornando um array
		StringBuilder builder = new StringBuilder();
		BufferedReader reader = new BufferedReader(
				new InputStreamReader(json));
		String line;
		while ((line = reader.readLine()) != null) {
			builder.append(line);
		}
 
		return new JSONArray(builder.toString());
	}

 

Nesse caso acima o arquivo que estava dentro do .gz era um json então precisava de retornar para a models um array em json, mas o importante para descompactar o arquivo é a linha:

1
InputStream json = new GZIPInputStream(getHelper().getContext().getResources().openRawResource(R.raw.municipios));

Tive que colocar o getHelper e getContext pois o método de loadFile estava dentro da minha DAO, se você estiver usando o método GZIPInputStream de dentro de uma activity faça apenas:

1
InputStream json = new GZIPInputStream(getResources().openRawResource(R.raw.municipios));

Nas linhas abaixo eu leio o arquivo json e salvo em uma StringBuilder para transforma-lo em um array, no caso acima ele descompacta o arquivo .gz e abre o arquivo json tudo dentro da memória do dispositivo.

Share Button

Leave a Reply