Ajuda: Simulação de transferência de ficheiro em Java

0 respostas
C

Boa noite,

Tenho em mãos um projecto para o final do Semestre na Universidade que consiste num programa em Java que simula a tranferência do conteúdo de um ficheiro A para um ficheiro B.

Já tenho algumas coisas feitas, mas como não tenho muita experiência ao nivel de Java (4/5 meses) com aulas 1 vez por semana, decidi procurar ajudar num fórum para conseguir optimizar o meu programa. Atenção com isto não quer dizer que venha aqui pedir o programa feito, mas sim solicitar ajudar de users mais experientes, e que me possam ajudar.

Até agora, já tenho isto realizado:

import java.io.File; 
import java.io.FileInputStream;  
import java.io.FileOutputStream;  
import java.io.IOException;  
import java.io.InputStream;  
import java.io.OutputStream;  
import java.math.BigInteger;  
import java.security.MessageDigest;

	public class TransferirFicheiro {
		
		public static void main(String[] args) {
			
// Valor inicial para calcular depois a velocidade de transferência.
			
			long tempoinicial = System.currentTimeMillis();
	
//Ler o ficheiro de origem e calcular o seu tamanho em bytes.
	
			String origem_f = "origem.txt";
			File ficheiro1 = new File("origem.txt");

			long size = ficheiro1.length();
			System.out.println ("Ficheiro a ler: " + origem_f + "Tamanho total (em bytes): " + size );

//Calcular MD5 do ficheiro de origem.

			byte[] fich1 = new byte[2000];
			int f1 = 0;

			MessageDigest mda = MessageDigest.getInstance("MD5");
			File inicial = new File("origem.txt");
			InputStream f_inicial = new FileInputStream(ficheiro1);

			while( (f1 = f_inicial.read(fich1)) > 0) {
				mda.update(fich1,0,f1); 
			}
			
			byte[] md5ficheiro1 = mda.digest();
			BigInteger ficheiroint = new BigInteger(1,md5ficheiro1);
			String output1 = ficheiroint.toString(16);
			
			System.out.println("MD5: " + output1);
			
//Declaração do ficheiro de destino.
			
			String destino_f = "destino.txt";
			File ficheiro2 = new File("destino.txt");
			
			System.out.println("Ficheiro de destino da transferência: "+ destino_f);
			
// Concretizar a transferência do ficheiro.
			
			boolean copiarFicheiro(String inicio, fim){	
					InputStream ia = null;  
					OutputStream ib = null;  
					byte[] transf;  
					boolean sucesso = true;  
				try {  
					ia = new FileInputStream("origem.txt");  
					ib = new FileOutputStream("destino.txt");  
					fich1 = new byte[ia.available()];  
					ia.read(fich1);  
					ib.write(fich1);  
				} catch (IOException e) {  
					sucesso = false;  
				} catch (OutOfMemoryError e) {  
					sucesso = false;  
				} finally {  
				try {  
				if (ia != null) {  
					ia.close();  
				}  
				if (ib != null) {  
					ib.close();  
				}  
				} catch (IOException e) {}  
				}  
					return sucesso;  
				}  
			
// Calcular MD5 do ficheiro de destino.
			
			MessageDigest mdb = MessageDigest.getInstance("MD5");
			File destinof = new File("destino.txt");
			InputStream f_final = new FileInputStream(ficheiro2);
			
			byte[] fich2 = new byte[2000];
			int f2 = 0;

			while( (f2 = f_final.read(fich1)) > 0) {
				mdb.update(fich1,0,f2); 
			}
			
			byte[] md5ficheiro2 = mda.digest();
			BigInteger ficheiro2int = new BigInteger(1,md5ficheiro2);
			String output2 = ficheiro2int.toString(16);
			
			System.out.println("MD5: " + output2);
			
			if (output1 == output2)
				System.out.println("Transferência 100% correcta.");
			if (output1 != output2)
				System.out.println("Transferência concluida com erros.");
			
// Calcular a velocidade de transferência do ficheiro.
		
			int t;  
				for(t=1;t<=1500;t++ ){  
				try {  
						Thread.sleep(0,1);
				}	catch (InterruptedException e) {
					e.printStackTrace();
				}
				
			long veloc = System.currentTimeMillis() - tempoinicial;  
			System.out.println("Velocidade de Transferência (KBytes/segundo): %.4f%n",veloc/1000.0);
		
	}

}

:P

Criado 28 de janeiro de 2010
Respostas 0
Participantes 1