Gravar Imagem em Arquivo Texto

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.

Tem como fazer isso ?
Abraço…

90% certeza que sim.

Já peguei um banco de dados que guardava STRINGS com os bytes das imagens (pois é … ) e consegui fazer minha app mostrar as imagens numa boa.

A não ser que tenha alguma manha muito bizarra com arquivos texto, deve funcionar tranquilamente.

Mas como fazer isso ?
Que método devo usar ? Tem algum exemplo, Please ?

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 :smiley:

Olá

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).

[]s
Luca

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…

Alex, ja pensou em usar XML com XStream pra isso? Ele ja faz essa conversao pra voce sozinho, se eu me lembro bem :wink:

http://xstream.codehaus.org

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.

Rafael

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.