Classe de dominio em memória

8 respostas
adrianohardcore

Gostaria de saber se existe como criar uma classe só para guardar valores na memoria como se fosse uma tabela no banco de dados.Tipo preciso guardar informações de arquivos de um diretorio EX:

public class Arquivos {
    private String nome;
    private static Date   data;
    private static  double tamanho;

e gravar estes dados:

File diretorio = new File(dir);
        File fList[] = diretorio.listFiles();
        for ( int i = 0; i < fList.length; i++ ){
		arq.setNome(fList[i].getName());            
        }

e depois recuperar a lista de arquivos.A intenção é gerar uma lista de arquivos de um diretorio de origem , depois uma lista de arquivos de destino , comparar os nomes e as datas e gerar uma lista de arquivos que serão atualizados.Já fiz este tipo de programa mas no Delphi e usando array.

8 Respostas

I

na memoria? nao tenho certeza, mas pra isso ser possivel a aplicação nao pode parar,
ela deve ficar em espera.

Bem, c a aplicação continuar a executar vc apenas deve manter as inserções no array
(array é limitado, cuidado, recomendo um ArrayList ou parecido) e fazer um loop nisso com as verificações tal

Se o aplicativo for fechado tudo é perdido, para isso ser resolvido vc deve usar entao, serialização (q guarda o estado dos objetos)
ou entao gravar num arquivo de texto mesmo

espero ter ajudado

adrianohardcore

Obrigado , no caso eu só preciso dos dados enquanto a aplicação estiver em execução.No Delphi por exemplo eu jogo tudo em array , no java gostaria tentar algo diferente .

ducafe

Cria uma classe chamada Arquivos que conterá um array de objetos do tipo Arquivo.

import java.util.Date;

class Arquivo
{
	public String nome;  
    public Date   data;  
    public double tamanho;
}

class Arquivos
{

	public Arquivo lista[];   //o array que será usado pra armazenar os objetos do tipo Arquivo

	Arquivos()
	{
		lista = new Arquivo[10];
	}
}

public class Main {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		Arquivo a1 = new Arquivo();
		a1.nome = "a1.txt";
		a1.tamanho = 12345;

		Arquivo a2 = new Arquivo();
		a2.nome = "a2.txt";
		a2.tamanho = 2345;
		
		Arquivos arquivos = new Arquivos();
		arquivos.lista[0] = a1;
		arquivos.lista[1] = a2;
		
	}

}

Seria isso que vc precisa?

adrianohardcore
ducafe:
Cria uma classe chamada Arquivos que conterá um array de objetos do tipo Arquivo.
import java.util.Date;

class Arquivo
{
	public String nome;  
    public Date   data;  
    public double tamanho;
}

class Arquivos
{

	public Arquivo lista[];   //o array que será usado pra armazenar os objetos do tipo Arquivo

	Arquivos()
	{
		lista = new Arquivo[10];
	}
}

public class Main {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		Arquivo a1 = new Arquivo();
		a1.nome = "a1.txt";
		a1.tamanho = 12345;

		Arquivo a2 = new Arquivo();
		a2.nome = "a2.txt";
		a2.tamanho = 2345;
		
		Arquivos arquivos = new Arquivos();
		arquivos.lista[0] = a1;
		arquivos.lista[1] = a2;
		
	}

}

Seria isso que vc precisa?

Essa é a ideia , obrigado.Porem fiz isto :

package util;

import dominio.Arquivo;
import dominio.Arquivos;
import java.io.File;

public class Verifica {
    Arquivo arq = new Arquivo();
    public void gera(String dir){
        File diretorio = new File(dir);
        File fList[] = diretorio.listFiles();
        System.out.println("Numero de arquivos no diretorio : " + fList.length );
        Arquivo lista[] = new Arquivo[fList.length];    
        for ( int i = 0; i < fList.length; i++ ){
            //System.out.println(fList[i].getName());
            arq.nome = fList[i].getName() ;
            arq.tamanho = fList[i].length();
            lista[i] = arq;
        }
        for ( int i = 0; i < fList.length; i++ ){  //Testar a resposta
            System.out.println(lista[i].nome);
        }
    }
}

Quando eu vou exibir a resposta ele esta repetindo o ultimo valor !

adrianohardcore

Alguém mais tem alguma ideia de porque estar repetindo o valor ? Caso este problema seja solucionado , o array que recebe os valores do objeto Arquivo pode ser do tipo static para não perder os valores enquanto o programa estiver rodando ?

fuadksd

seu atributo arq não pode ser uma atributo.
tens que declarar ele como variável local assim:

public class Verifica {

	class Arquivo {
		public String nome;
		public Date data;
		public double tamanho;
	}

	public static void main(String[] args) {

		new Verifica().gera("C:");
	}

	public void gera(String dir) {

		File diretorio = new File(dir);
		File fList[] = diretorio.listFiles();
		System.out.println("Numero de arquivos no diretorio : " + fList.length);
		Arquivo lista[] = new Arquivo[fList.length];
		for (int i = 0; i < fList.length; i++) {
			Arquivo arq = new Arquivo();
			// System.out.println(fList[i].getName());
			arq.nome = fList[i].getName();
			arq.tamanho = fList[i].length();
			lista[i] = arq;
		}
		for (int i = 0; i < lista.length; i++) { // Testar a resposta
			System.out.println(lista[i].nome);
		}
	}
}

desse modo, cada loop for salva num novo arquivo. do outro modo estava salvando sempre por cima do mesmo arquivo

adrianohardcore

Funcionou , muito obrigado ! Agora para eu usar essa informação em outra classe , qual a melhor alternativa , passar o array como retorno ou colocar a array como estática ? Tambem seria uma boa trocar de array para arrayList né ?

fuadksd

retorne o array no método gera()

minnha opiniao: se o algoritmo for só esse, deixa array. como tu ja sabes o tamanho do array previamente (o numero de diretorios) eu deixaria array. ArrayList é bom pra quando tu não sabe o número de elementos que tu vais adicionar.

Criado 13 de dezembro de 2011
Ultima resposta 14 de dez. de 2011
Respostas 8
Participantes 4