Boa tarde, crieu um .jar onde eu compacto um arquivo para transferir via ftp, esta funcionando perfeitamente, até o momento que o arquivo mesmo compactado fica grande, maior q 200 mb, pois o tempo de conexão com o servidor de ftp expira. Tem como compactar em partes, como o winrar faz usando java? Procurei no google mas não encontrei nada.
vlw
Cara, se eu nao estou enganado acho que a sacada ai não é compactar em partes.
Mas sim enviar em partes para o ftp…
Acho que assim você pode ter mais sucesso…
posso estar falando besteira, mas acho que assim dá.
[]'s
[quote=felipehand]Cara, se eu nao estou enganado acho que a sacada ai não é compactar em partes.
Mas sim enviar em partes para o ftp…
Acho que assim você pode ter mais sucesso…
posso estar falando besteira, mas acho que assim dá.
[]'s[/quote]
como fazer para enviar em partes para o ftp?
hj estou usando assim:
public static boolean transfereArqFTP(String servidor, String usuario, String senha, List<File> listaArquivos, String diretorio) {
String nomeArquivo = null;
FTPClient ftp = new FTPClient();
try {
ftp.connect(servidor);
// verifica se conectou com sucesso!
if (FTPReply.isPositiveCompletion(ftp.getReplyCode())) {
if (!ftp.login(usuario, senha)) {
ftp.disconnect();
System.out.println("Login recusado");
return false;
}
} else {
// erro ao se conectar
ftp.disconnect();
System.out.println("Conexao recusada");
return false;
}
String dir = "";
for (int i = 0; i < diretorio.length(); i++) {
if (!diretorio.substring(i, i + 1).equals("\")) {
dir += diretorio.substring(i, i + 1);
} else {
if (!ftp.changeWorkingDirectory(dir.trim())) {
ftp.disconnect();
System.out.println("Diretorio de envio informado inexistente");
return false;
} else {
dir = "";
}
}
}
if (!ftp.changeWorkingDirectory(dir.trim())) {
ftp.disconnect();
System.out.println("Diretorio de envio informado inexistente");
return false;
}
// para cada arquivo informado...
for (Iterator<File> iter = listaArquivos.iterator(); iter.hasNext();) {
File arquivo = iter.next();
// abre um stream com o arquivo a ser enviado
InputStream is = new FileInputStream(arquivo);
// pega apenas o nome do arquivo
int idx = arquivo.getName().lastIndexOf(File.separator);
if (idx < 0){
idx = 0;
} else {
idx++;
}
nomeArquivo = arquivo.getName();
// ajusta o tipo do arquivo a ser enviado
if (arquivo.getName().endsWith(".txt")) {
ftp.setFileType(FTPClient.ASCII_FILE_TYPE);
} else if (arquivo.getName().endsWith(".jpg")) {
ftp.setFileType(FTPClient.BINARY_FILE_TYPE);
} else {
ftp.setFileType(FTPClient.ASCII_FILE_TYPE);
}
System.out.println("Enviando arquivo " + nomeArquivo + "...");
// faz o envio do arquivo
if (!ftp.storeFile(nomeArquivo, is)) {
ftp.disconnect();
System.out.println("Nao foi possivel enviar o arquivo " + nomeArquivo + "...");
return false;
} else {
System.out.println("Arquivo " + nomeArquivo + " enviado com sucesso!");
}
}
ftp.disconnect();
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
} catch (Throwable e) {
e.printStackTrace();
return false;
}
}
Maninho,
Camarada fez isso uma vez em C#, vo ver com ele como ele fez e post aqui. Mas lembro nitidamente o que ele falou isso pra mim…
Se você setar o tamanho do buffer, ele obrigatoriamente nao “divide” o arquivos em partes e manda?