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