Olá pessoal,
Alguém sabe me dizer como ler o conteúdo de um arquivo .rar?
nas minhas pesquisas eu descobri que posso usar a classe ZipFile para ler arquivos .zip, mas no caso de arquivos .rar, como eu faço para ler os arquivos armazenados nele.
Por exemplo:
Eu tenho o diretório imagens.rar e dentro desse diretório eu tenho várias imagens.
Grato, Levi.
Será que não existe alguma maneira para se fazer algo como:
//Obter todos os arquivos inlcusos no arquivo (diretório .rar)
for (File file : arquivoRar.getFiles()) {
//
}
??
Camarada levimendes, .rar é um arquivo, como tal, possui determinadas regras para leitura.
A coisa legal no java é que, se não existe, você pode criar.
Mãos à obra.
Bom, eu nunca usei e não sei se é exatamente que você precisa, da uma olhada nessa lib ai http://code.google.com/p/raroscope/?, pode ser que resolva seu problema.
Se funcionar certinho da um feedback ai.
Abraço
É exatamente isso que eu estava querendo (Só que no fim acabei lendo apenas arquivos .zip):
private class SalvaImagemAsyncTasc extends AsyncTask<Void, String, Void> {
private ProgressDialog progressDialog;
@Override
protected Void doInBackground(Void... params) {
String pathImagens = "mnt/sdcard/img_to_be_saved.zip";
File file = new File(pathImagens);
ZipFile zipFile = null;
try {
zipFile = new ZipFile(file);
} catch (ZipException e1) {
Log.e("SalvaImagemAsyncTasc", e1.getMessage());
} catch (IOException e1) {
Log.e("SalvaImagemAsyncTasc", e1.getMessage());
}
if (zipFile != null) {
Enumeration enumeration = zipFile.entries();
int qtdImagens = zipFile.size();
int qtdImagensInseridas = 0;
while (enumeration.hasMoreElements()) {
ZipEntry entry = (ZipEntry) enumeration.nextElement();
InputStream inputStream = null;
try {
inputStream = zipFile.getInputStream(entry);
byte bytesImagem[] = toBytes(inputStream);
Imagem imagem = new Imagem();
imagem.setNomeImagem(entry.getName());
imagem.setImgagem(bytesImagem);
String msgAndamento = new String("Inserindo imagem: " + entry.getName());
msgAndamento += "\n" + ++qtdImagensInseridas + " de " + qtdImagens;
Log.e("SavingImageOnDatabaseActivity", "" + qtdImagensInseridas);
publishProgress(msgAndamento);
bancoDeDadosTeste.inserirImagem(imagem);
} catch (FileNotFoundException e) {
Log.e("SavingImageOnDatabaseActivity", e.getMessage());
} catch (IOException e) {
Log.e("SalvaImagemAsyncTasc", e.getMessage());
}
}
}
return null;
}
@Override
protected void onProgressUpdate(String... values) {
progressDialog.setMessage(values[0]);
}
@Override
protected void onPostExecute(Void result) {
super.onPostExecute(result);
if (progressDialog != null && progressDialog.isShowing()) {
progressDialog.dismiss();
}
}
@Override
protected void onPreExecute() {
super.onPreExecute();
progressDialog = ProgressDialog.show(SavingImageOnDatabaseActivity.this, "Aplicativo de testes", "Inserindo imagens...");
}
}
Obrigado a todos.