Estou desenvolvendo uma aplicação para fazer upload de arquivo em um site FTP. A aplicação está funcionando perfeitamente. Porém eu só consigo manipular os arquivos que foram enviados depois que a aplicação é fechada. Por exemplo, tenho um diretório chamado “teste”, nesse diretório tem dois arquivos. Rodo minha aplicação e tento alterar o arquivo manualmente, ai diz que o arquivo está sendo usado. Quando fecho a aplicação eu consigo alterar, apagar, mover, … o arquivo. Na minha aplicação estou utilizando a classe File(). O envio do arquivo acontece no método sincronizar.
Classe de Envio
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package br.com.jdsistemas.ftp;
import br.com.jdsistemas.utilitarios.GerenciaMensagens;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.net.SocketException;
import java.text.ParseException;
import java.util.logging.Level;
import java.util.logging.Logger;
/**
*
* @author JDassa
*/
public class FTP {
private static FrmPrincipal principal;
private static String path = new File("").getAbsolutePath();
private static ClientFtp clientFtp = new ClientFtp();
private static String linha = "", endFtp = "", usuario = "", senha = "", dirVirtual = "",
dirLocal = "", horaSinc = "", porta = "";
public static void main(String[] args) {
try {
IconeTray iconeTray = new IconeTray();
iconeTray.exibir();
carregarConfig();
principal = FrmPrincipal.getInstance();
principal.setVisible(true);
// principal.sincronizar();
SincronizarThread sincronizarThread = new SincronizarThread();
sincronizarThread.start();
} catch (FileNotFoundException ex) {
Logger.getLogger(FTP.class.getName()).log(Level.SEVERE, null, ex);
} catch (IOException ex) {
Logger.getLogger(FTP.class.getName()).log(Level.SEVERE, null, ex);
} catch (ParseException ex) {
principal.setLog(ex.getMessage());
GerenciaMensagens.erroInicializarJanela(ex);
}//fim do try/catch
}//fim do método main
/**
* @return the path
*/
public static String getPath() {
return path;
}
public static void carregarConfig() throws FileNotFoundException, IOException {
//Carregando configurações
FileReader file = new FileReader(FTP.getPath() + "/config.jds");
BufferedReader leitura = new BufferedReader(file);
while ((linha = leitura.readLine()) != null) {
try {
if (linha.substring(0, 9).equals("endereco=")) {
endFtp = linha.substring(9);
}
if (linha.substring(0, 6).equals("porta=")) {
porta = linha.substring(6);
}
if (linha.substring(0, 8).equals("usuario=")) {
usuario = linha.substring(8);
}
if (linha.substring(0, 6).equals("senha=")) {
senha = linha.substring(6);
}
if (linha.substring(0, 11).equals("dirVirtual=")) {
dirVirtual = linha.substring(11);
}
if (linha.substring(0, 9).equals("dirLocal=")) {
dirLocal = linha.substring(9);
}
if (linha.substring(0, 9).equals("horaSinc=")) {
horaSinc = linha.substring(9);
}
} catch (IndexOutOfBoundsException erro) {
}
}
file.close();
}
public static void sincronizar() {
try {
//Conectando
principal.setLog("Conectando...");
if (clientFtp.conectar(endFtp, porta, usuario, senha, dirVirtual)) {
principal.setLog("Conectado!");
} else {
principal.setLog("Um erro aconteceu ao conectar com o servidor!");
}//fim do if else
//Enviando arquivos
File diretorio = new File(dirLocal);
File[] arquivos = diretorio.listFiles();
if (arquivos != null) {
for (int i = 0; i < arquivos.length; i++) {
File f = arquivos[i];
String nomeArq = f.getName();
double tamArq = f.length() / 1024;
if (f.isFile()) {
principal.setLog((i + 1) + " / " + arquivos.length + " -> Enviando arquivo '" + nomeArq + "' (" + tamArq + " Kb)...");
if (clientFtp.enviar(f.getAbsolutePath(), nomeArq)) {
principal.setLog("Arquivo '" + nomeArq + "' enviado!");
} else {
principal.setLog("Um erro aconteceu ao enviar o arquivo '" + nomeArq + "'!");
}//fim do if/else
}//fim do if
}//fim do for
}//fim do while
//Desconectando
principal.setLog("Desconectando...");
if (clientFtp.desconectar()) {
principal.setLog("Desconectado!");
} else {
principal.setLog("Um erro aconteceu ao desconectar com o servidor!");
}//fim do if/else
} catch (SocketException ex) {
principal.setLog(ex.getMessage());
} catch (IOException ex) {
principal.setLog(ex.getMessage());
} catch (Exception ex) {
principal.setLog(ex.getMessage());
}//fim do try/catch
}//fim do método sincronizar
/**
* @return the horaSinc
*/
public static String getHoraSinc() {
return horaSinc;
}
public static void setHoraSinc(String hora) {
horaSinc = hora;
}
public static void iniciarSincronia() {
principal.sincronizar();
}
}
Desde já agradeço!