FTP w javie - kopiowanie folderów

0

Postanowilem napisac synchronizator pomiedzy serwerem FTP a plikami lokalnymi wszystko wydawało się proste jednak pojawił sie problem w funkcji do kopiowania całych katalogów.
Wydawałoby sie ze powinno to działać bez problemu, jednakze pojawia sie problem ze ścieżkami pod ktore mam kopiować, log z serwera FTP wyglada w ten sposób:

09:08:01 #2 << 230 User ss logged in.
09:08:01 #2 >> PWD 
09:08:01 #2 << 257 "/C:/SERWER/" is current directory.
09:08:01 #2 >> EPSV ALL
09:08:01 #2 << 500 'EPSV': command not understood.
09:08:01 #2 >> PASV 
09:08:01 #2 << 227 Entering Passive Mode (127,0,0,1,12,10).
09:08:01 #2 >> LIST 
09:08:01 #2 << 150 Opening data connection for directory list.
09:08:01 #2 << 226 File sent ok
09:08:15 #2 >> MKD c
09:08:15 #2 << 257 'C:\SERWER\c': directory created.
09:08:15 #2 >> MKD FTP
09:08:15 #2 << 257 'C:\SERWER\FTP': directory created.
09:08:15 #2 >> TYPE I
09:08:15 #2 << 200 Type set to I.
09:08:15 #2 >> TYPE I
09:08:15 #2 << 200 Type set to I.
09:08:15 #2 >> EPSV ALL
09:08:15 #2 << 500 'EPSV': command not understood.
09:08:15 #2 >> PASV 
09:08:15 #2 << 227 Entering Passive Mode (127,0,0,1,12,13).
09:08:15 #2 >> STOR ocuments and Settings\Robert.24XPAMD\Moje dokumenty\NetBeansProjects\FtpSync\c\FTP\FORUM.ZIP
09:08:15 #2 << 150 Opening data connection for ocuments and Settings\Robert.24XPAMD\Moje dokumenty\NetBeansProjects\FtpSync\c\FTP\FORUM.ZIP.
09:08:15 #2 << 426 Connection closed; Cannot create file C:\SERWER\ocuments and Settings\Robert.24XPAMD\Moje dokumenty\NetBeansProjects\FtpSync\c\FTP\FORUM.ZIP.

Tymczasowe wywołanie funkcji ktora ma skopiowac z dysku c:\c (katalog c):

 File z=new File("c:\\c");
  File tam=new File("c");
        try {
            kopiuj_katalog(z, tam);
        } catch (IOException ex) {
            Logger.getLogger(FtpSyncView.class.getName()).log(Level.SEVERE, null, ex);
        }

Funkcja kopiująca katalogi.

public void kopiuj_katalog(File skad, File gdzie)
                               throws IOException{
  
  if (skad.isDirectory()){
      if (!baza_sync.czy_istnieje_katalog_na_FTP(gdzie.getName())){
        
        polaczenie.mkdir(gdzie.getName());
     }
 
     String files[] = skad.list();
  
    for(int i = 0; i < files.length; i++){
        kopiuj_katalog(new File(skad, files[i]), 
                     new File(gdzie, files[i]));
      }
    }
   else{
      if(!skad.exists()){
        System.out.println("Plik lub katalog nie istnieje");
       //System.exit(0);
      }
      
else
      {
      Plik.local=skad.getAbsolutePath();
      Plik.remote=polaczenie.parser_gdzie(gdzie);
      
      Upload w= new Upload();
      w.start();
        }
      }
   }

Klasa przechowująca sciezki na potrzeby wątku

class Plik{
    static String local,remote;
    static int rozmiar;
}

Wątek obsługujący UPLOAD;

public class Upload extends Thread {
      
        @Override
    public void run() {
    try{
    int i = 0;
    int counter=0;
    polaczenie.binary();
    byte[] bytesIn = new byte[1024];
    FileInputStream in = new FileInputStream(Plik.local);
    File plik= new File(Plik.local);
    jProgressBar1.setMaximum((int)plik.length());
    BufferedOutputStream out = new BufferedOutputStream(polaczenie.put(Plik.remote));
    while ((i = in.read(bytesIn)) >= 0) {
    counter=(counter+i);
    jProgressBar1.setValue(counter);
    out.write(bytesIn, 0, i);
    }
in.close();
out.close();
    }
    catch(Exception e)
    {
        System.out.println("WYJATEK");
    }
    }
}

Może ktoś ma pomysł jak rozwiązać mam ten problem ??

0

a nie mozesz uzyc apache.commons.net?
Dobry programista powinien najpierw zasiadac do google'a a dopiero potem do kodu

pozdrawiam

0

z commonsem to proponuje uwazac nie zawsze wszystko i pieknie tam dziala.

1 użytkowników online, w tym zalogowanych: 0, gości: 1