Pessoal,
Tenho um arquivo Texto com diversas informações sobre um assunto., tipo um Properties ou um INiFile, ou seja, do tipo:
Chave=valor
Uma das informações que quero gravar é uma imagem. Então gostaria de saber como faço para gravar os bytes de uma imagem JPEG nesse arquivo e como recuperar, por exemplo, gravaria da seguinte forma:
Imagem1=udas8f7d823430984098rkfjrdlkfjio0vufs0vuf0gf98g70fucs8dud8s8fs
Carregaria então em uma String e dessa String transferiria para um BufferedImage.
Oi Alex. Guardar arquivos binarios, como imagens, em formato String nao eh geralmente uma boa ideia, por causa do desperdicio de espaco, mas caso vc precise mesmo, voce pode olhar o jeito que alguns protocolos famosos (por exemplo, HTTP e SMTP) fazem: usando um encoding chamado Base64.
Esse encoding eh bem simples: ao inves de converter todo o arquivo binario em uma sequencia de hexadecimais (base 16), ele aproveita que a “area util” das Strings que nao conflita com nenhum outro encoding (ou seja, que nao eh estragado com acentuacao e tudo mais), e usa uma base maior para representar os dados. Voce pode encontrar diversas implementacoes de Base64 em Java por ai, mas se nao me engano na propria API do Java ja vem uma
Esta idéia maluca me lembra o tempo das BBSs. A gente baixava um arquivo BMP e vinha um monte de caracteres. Ainda é assim com alguns mime-types. Mas para que diabos eu gravaria uma imagem no arquivo de properties? No meu caso preferiria guardar da imagem só o endereço relativo (nunca o endereço completo do servidor senão não se pode migrar a aplicação).
Não é tão maluca assim, dependendo da aplicação. tenho um sisteminha que só grava uma pequena imagem para efeitos de visualização. Vamos supor que seja tipo um cadastro de pessoas, com uma fotinha pequena dela.
Todas as informações são gravadas em um único arquivo zipado, e para mostrar, tenho que descompactar tudo em um dir temporário, carregar imagem por imagem, etc…
Assim, eu tenho o seguinte:
dados1.properties:
Nome1=Fulano
Nome2=Cicrano
Nome3=Beltrano
teria que ter então 3 arquivos separados :
Fulano.jpg
Cicrano.jpg
Beltrano.jpg
Minha classe carrega os dados em Properties e a foto em BufferedImage.
Para gravar o arquivo .zip, tenho que gravar os properties e depois ainda gravar cada arquivo .jpg para depois compactar tudo num .zip. Trabalhão, mas funciona. Só que se fosse tudo no arquivo de dados, tipo:
Nome1=Fulano
FotoFulano=1287391jkhejkfhfsdfys89sf8sdf
Nome2=Cicrano
FotoCicrano=iefewifu09wfwjrp34t-0r09rg98dfug09g
Seria muito mais simples de tratar a gravação e o carregamento dos mesmos.
Abraços…
Mas pq guardar em um aquivo zipado? a tava de compressao sobre gif / jpeg vai ser mto baixa. Como ja disseram, pq nao guarda simplesmente o nome dos arquivos no .properties e deixa as imagens em si no filesystem? Vai ser muuuuito mais rapido o processamento.
Pela facilidade de transferência de dados.
Para usuário final, daqueles que não entendem nada de computador, é muito mais fácil você fornecer apenas um arquivo para ele guardar do que dezenas de aruivozinhos na hora de mudar para outro computador ou reinstalar o SO.