Tutorial: escrevendo seu próprio servidor de transferência arquivos (parte1)

Uma das primeiras aplicações de rede que surgiram foram os servidores de transferência de arquivos.
Hoje o protocolo mais usado para esse fim é o FTP
(File Transfer Protocol), e pode ser uma boa fonte de referências para o assunto.
Vamos ao que interessa. Acho que o passo mais simples é começar implementando os comandos, sem pensar
na comunicação em rede por enquanto. Um passo de cada vez.
O código abaixo é um exemplo simples de como criar um diretório:

class Command{
	public void criarDiretorio(String nomeDiretorio){
		File dir = new File(nomeDiretorio);
		
		if(dir.exists()){
			if(dir.isDirectory()){
				System.out.println("O diretório " + nomeDiretorio + " já existe!");
			}else if(dir.isFile()){
				System.out.println("O caminho " + nomeDiretorio + " é um arquivo!");
			}
		}else{
			dir.mkdir();
		}
	}
}

Reparemos que a execução do comando já está separada no seu próprio método. Isolar as partes do seu programa é um pouco mais trabalhoso, mais acreditem, deixa o desenvolvimento muito mais consistente. Bom, com essa estratégia podemos escrever cada comando em seu próprio método, e ainda, um método controlador que executa o comando apropriado de acordo com um código ou nome recebido:

class Command {
	public static final int	CRIAR_DIR	= 1;
	public static final int	LISTAR_DIR	= 2;

	public String[] executar(int codigoComando, String[] args) {
		switch (codigoComando) {
			case CRIAR_DIR:
				return criarDiretorio(args[0]);

			case LISTAR_DIR:
				return listarConteudo(args[0]);

			default:
				return null;
		}
	}

	private String[] criarDiretorio(String nomeDiretorio) {
		File dir = new File(nomeDiretorio);

		String[] result = null;

		if (dir.exists()) {
			if (dir.isDirectory()) {
				result = new String[] { "O diretório " + nomeDiretorio + " já existe!" };
			} else if (dir.isFile()) {
				result = new String[] { "O caminho " + nomeDiretorio + " é um arquivo!" };
			}
		} else {
			dir.mkdir();
		}

		return result;
	}

	private String[] listarConteudo(String nomeDiretorio) {
		File dir = new File(nomeDiretorio);

		String[] result = null;

		if (!dir.exists()) {
			result = new String[] { "O diretório " + nomeDiretorio + " não existe!" };
		} else if (dir.isFile()) {
			result = new String[] { "O caminho " + nomeDiretorio + " é um arquivo!" };
		} else {
			result = dir.list();
		}

		return result;
	}
}

Com essa estrutura, já é possível escrever diversos comandos, cada um com seu próprio código. Reparem que comando que seleciona o comando a ser executado recebe um array de Strings, para receber um número variável de argumentos. As saídas dos comandos deixaram de ser enviadas para saída padrão para serem retornadas em arrays também. Assim, a execução dos comandos fica isolada da exibição dos resultados, de forma que os resultados podem ser exibidos no console, em uma janela ou transmitidos pela rede.

Anúncios

3 Responses to “Tutorial: escrevendo seu próprio servidor de transferência arquivos (parte1)”


  1. 1 Ecson 10/05/2011 às 14:45

    Ficou show !!!!

  2. 2 Roberto Cajueiro 12/19/2012 às 23:06

    Amigo vc pode me ajudar em uma situação com socket? vc sabe como faço pra colocar uma escuta em um diretorio onde quando surgir o arquivo na pasta o socket envie (remova) para o servidor o arquivo?


Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s




Categorias

Atualizações Twitter

Erro: o Twitter não respondeu. Por favor, aguarde alguns minutos e atualize esta página.


%d blogueiros gostam disto: