Preciso de um modo para salvar os arquivos gerados pelo meu programa, eles deverão estar em um formato .SCALA, cada arquivo deverá conter uma série de informações incluindo caminhos de arquivos que serão usados pelo arquivo montado (endereços de figuras em determinadas pastas do projeto deverão constar no arquivo salvo).
Gostaria de saber se eu salvo essas informações em um arquivo texto ou se existe alguma forma mais simples de fazer o que eu quero?
Se puder, alguma função pronta para eu usar de base seria ótimo (:
O que é o programa (para quem quiser ler): trata-se de classes jogadas em um JPanel que formam uma sequência de fotos, essas fotos estão armazenadas no projeto, há também diversos layouts que deverão ser gravados também, então eu preciso carregar primeiro o layout, montar o layout no JPanel e depois ir adicionando as figuras (que já estão dentro do projeto).
Obrigado!
Não entendi seu problema.
Mas serialização ajudaria?
Procure por ‘Serializable’
Resumindo beeem:
Como faz para construir um arquivo e salvá-lo.
Vou procurar!
Olha cara não sei se entendi bem o teu problema, tu queria apresentar vairas fotos no JPanel ?, tu pode sim criar um arquivo.SCALA usando Serializable, tenho um exemplo aqui como mais ou menos tu faria
private void gravaObjeto (File f, Object o){
try {
FileOutputStream fos = new FileOutputStream (f);
ObjectOutputStream os = new ObjectOutputStream (fos);
os.writeObject (o);
os.close ();
}catch (IOException e) {
System.out.println ("Erro ao gravar objeto.");
}
}
Seria mais generico por receber qualquer objeto, as informações não apareceriam, eles ficariam dentro do objeto salvo, e tu só poderia ter acesso a elas por codigo dentro do teu programa.
Exemplificando bem o que eu quero.
Preciso salvar registros em um arquivo, nesta lógica.
…
Por exemplo em um arquivo texto poderia ser da seguinte forma.
1#gato#cachorro#galinha@
Se eu saber como salvar/abrir um arquivo com esta lógica (o número é o tipo de layout, os #'s separadores de cartões e o @ um finalizador) já tenho meio caminho andado.
Obrigado!
Não tinha lido que tu queria criar um tambem :oops: , olha cara:
[code] public class Links implements Serializable{ // não me lembro se é extends ou implements
private Vector links = new Vector (1,1);
public void adicionaLink(String link){
this.links.add(link);
}
public Vector getLinks(){return this.links;}
}
[/code]
cria um objeto Links adiciona teus links e depois salva o objeto com o metodo gravaObjeto, cria um FIle com o endereco dai fica gravaObjeto(file,Links);
não pude testar os códigos mais acho que pode ser mais ou menos essa ideia
Entendi!
Isso realmente me soluciona alguns problemas, essa função cria uma lista de links certo? E depois ele grava esta lista em um arquivo certo?
Muito bem, mas preciso salvar também um valor de layout, que varia de 1 a 4. Tem como colocar ele em forma de string dentro desse objeto e depois na hora da leitura ler isto como uma string e transformar para inteiro? (O valor dessa layout seria a primeira string desse vetor, por definição)
Cara eu usaria , Integer.parseInt(); … ja tentou ?
Pega o número do layou via parametro e passa ele como String pro método, e depois faz o Integer.parseInt(""); ou tu ainda pode verificar se a string que o método recebeu é um número ou não dai tu pode fazer algo assim
private String transformaNum(String string){
char[] aux = new char[string.length()];
int count = 0;
for(int i = 0; i < string.length(); i++){
if(string.charAt(i).isDigit() == true)
aux[count++] = string.charAt(i);
}
String s = new String(aux);
return s;
}
Pode usar isso nesse método só para verificar a string, não sei bem o que tu quer, mais isso ja me ajudou uma no trabalho da facul.
Para pegar um objeto INTEIRO, salvar num arquivo todos os atributos não estáticos e não transientes, serialização pode ser uma boa pedida.
Porém, tem que tomar cuidado com superclasses não serializáveis ou associação com outras entidades (i.e, objetos que relacionam com objetos não serializáveis).
class Cat implements Serializable{
/*milhões de coisas serializáveis e não estáticas aqui*/
}
public class TesteSerializacao{
public static void main(String[] args){
Cat c = new Cat();
//Serializando
try{
FileOutputStream fs = new FileOutputStream("nomeDoArquivo.ser");
ObjectOutputStream os = new ObjectOutputStream(fs);
os.writeObject(c);
os.close();
} catch (Exception e) {e.printStackTrace();}
//Deserializando
try{
FileInputStream fis = new FileInputStream("nomeDoArquivo.ser");
ObjectInputStream fos = new ObjectInputStream(fis);
Cat c2 = (Cat) ois.readObject();
ois.close();
} catch (Exception e) {e.printStackTrace();}
}
}
Copiei esse código do livro da Kathy&Bert. Deve funcionar hehe
Tem algumas frescuras, tipo que na deserialização, não é chamado o construtor. Mas não sei se você precisa de tudo isso.
Seria minha primeira tentativa.
Olha cara sei lá, minha opinião, acho mais facil tu criar os métodos para salvar e carregar na classe que vai “fazer funcionar” o teu programa e não no método main.
Já resolvi meu problema, to conseguindo salvar e carregar meus arquivos, consegui transformar toda minha informação em objects, ta quase pronto!
Só tenho mais uma dúvida, eu peguei minha lista de strings, transformei para um object, e agora? Como transformo um Object lido em uma lista de strings?
Um: links = (ArrayList) info; resolve?
Obrigado!
Carrega por exemplo:
Links lk = (Links) this.leObjeto();
Vector <String> v = new Vector <String> (1,1);
v = lk.getVector();
for(int i = 0; i < v.size(); i++){
System.out.println(v.get(i));
}