problem z commons

0

hej,
musze zrobic polaczenie ftp. sciagnelam sobie biblio commons (z oficjalnej strony), w wersji commons-net-1.4.1.jar,
plik umiescilam we wlasciwej sciezce (/jre/lib/ext). uzywam neatbens. dodalam commons'a i jako biblioteke i jako jara.
jednak przy probie stworzenia obiekty typu FTPClient, czyli:

FTPClient klient = new FTPClient();

dostaje blad ze cannot find symbol (tyczy sie to FTPClient).

czy ktos z Was wie moze co jest nie tak lub czego mi jeszcze brakuje?

pzdr,
misty

0

juz sobie poradzilam, nie zrobilam importu.. ;)

pzdr!

0

Błąd pojawia się przy kompilacji czy przy uruchamianiu ? Na wszelki wypadek skopiuj jara do dwóch katalogów: jre/lib/ext oraz jdk/jre/lib/ext. Sam niedawno instalowałem ten pakiet, będziesz jeszcze potrzebować pakietu jakarta-oro-2.0.8.jar. Ja mam te pakiety tylko w jre/lib/ext, ale kompilowałem "z ręki"
(bez IDE) i wspomniany katalog jest wymieniony w CLASSPATH.
pozdrawiam

0

jak pisalam wyzej-to byla moja nieuwaga, nie importowalam biblioteki.

korzystajac jednak z okazji, ze zaczelam temat, mam do Was nastepujace pytanie:
jak najlepiej zorganizowac sobie klase odpowiedzialna za polaczenie z ftp i sciagniecie pliku. nie chce smiecic ani pisac czegos tak jak sie nie powinno.
wiec tak, mam klase FTPCon - w niej bede sie laczyc i sciagac plik. pytanie moze glupie, ale jako osoba poczatkujaca mam spore braki. czy mozna (powinno sie?/nie powinno?) zrobic polaczenie w konstruktorze?
tzn niech przykladowo klasa wyglada tak:

 public class FTPCon { 
 
 public FTPCon { 
 //tu w konstruktorze lacze sie z FTP 
 pobierz_plik(); 
 // po pobraniu pliku rozlaczam sie 
 } 
 
 public void pobierz_plik() 
 { 
 //pobieram i zapisuje na dysku plik pobrany z ftp 
 } 
 }

czy taka konstrukcja nie jest wadliwa? czy moze powinnam w klasie FTPCon napisac osobne metody do polaczenia sie i do rozlaczenia i na przyklad wywolac je w konstruktorze?
czy w ogole lepiej za wiele waznych operacji w konstruktorze nie robic?

0

Przeczytałaś dokładnie mój post ? Masz pakiet jakarta-oro-2.0.8.jar ? Kompilator tego pakietu nie potrzebuje. Jego brak objawi się błędem podczas ściągania.
Organizacja zależy mocno od tego co ma program robić:

  • łączyć się i ściągać jeden plik, którego nazwa jest z góry znana
  • łączyć się, wyświetlać zawartość katalogów i pozwalać użytkownikowi na ściągnięcie wybranego pliku [plików] [katalogu].
0

juz sciagam tego jara, sorki nieuwaznie przeczytalam Twojego posta. dzieki ze mi jeszcze raz zwrociles uwage!
co do tego jak to bedzie dzialac - to zadanie tej klasy to bedzie polaczyc sie z ftp, zapisac plik na dysku i rozlaczyc sie. bez zadnej interakcji uzytkownika.
czyli pierwszy wariant ktory wymieniles

0

Ja bym w ogóle nie tworzył nowej klasy do ściągania. W głównej klasie programu umieściłbym metodę

private boolean pobierz(...)
{
     FTPClient f=new FTPClient();
     boolean ok=false;
     try
     {
         f.connect(...);
         f.login(...);
         f.changeWorkongDiectory(...) ;
         FileOutputStream out=new FileOutputStream(...);
         f.retrieveFile(...,out);
         out.close();
     }
     catch(Exception e)
     {
         ....
     }
     finally
     {
         if(f.isConnected())
         {
             f.disconnect(); 
         }     
     } 
     return ok;
}

i wszystkie potrzebne metodzie pobierz informacje (serwer,port,login,password,katalog,nazwy plików) przekazywałbym jako argumenty

0

co to sa za funkcje:

 f.changeWorkongDiectory(...) ;
         FileOutputStream out=new FileOutputStream(...);
         
f.retrieveFile(...,out);

?

0

literówka się wkradła

f.changeWorkingDiectory(...) ; // zmienia katalog na serwerze
FileOutputStream out=new FileOutputStream(nazwa_pliku_lokalnego);
f.retrieveFile(,,,.out); // pobiera plik z serwera i zapisuje pod podaną wyżej nazwą 

korzystasz z klasy FTPClient() i nie zajrzałaś do jej dokumentacji ? [!!!]

0

no jeszcze nie korzystam, poki co-zbieram informacje;)
a tak serio to masz racje, juz tam patrze.
testowalam sobie tylko to co mi napisales wczesniej. zauwazylam jedna dziwna rzecz-mianowicie przerobilam sobie ciut przyklad na try-catch:

  try   {
  
  klient.connect("adres");
 
  System.out.println("Polaczono z FTP!");
  
    // logujemy sie
        try{
        
 klient.login(FTPUser, FTPPassword);       
        System.out.println("Zalogowano do FTP!");
        }
        
        catch(Exception exc_FTP_login) {
        
            System.out.println("Cannot log into FTP.. "+exc_FTP_login);
        }
  
  }
  
  
  catch(Exception exc_conFTP)   {
  
      System.out.println("Cannot connect to FTP.. "+exc_conFTP);
  }
  
  
    }


co jednak dziwne, loguje mi sie z ftp caly czas, tzn nawet jak podam zle haslo, to otrzymam status ze zalogowano.. czemu to tak? jak sie lacze np przez www to nie przejdzie mi ze zlym haslem..

0

Zajrzyj wreszcie do dokumentacji

public boolean login(String username,
String password)
throws IOException

Login to the FTP server using the provided username and password.

Parameters:
    username - The username to login under.
    password - The password to use. 
Returns:
    True if successfully completed, false if not. 
Throws:
    FTPConnectionClosedException - If the FTP server prematurely closes the connection as a result of the client being idle or some other reason causing the server to send FTP reply code 421. This exception may be caught either as an IOException or independently as itself. 
    IOException - If an I/O error occurs while either sending a command to the server or receiving a reply from the server.

Sprawdzaj wartość zwróconą prze funkcję login().

0

dokopalam sie do dokumentacji, przejrzalam co trzeba. i juz nawet zrobilam ze dziala tak jak chce. dzieki za cierpliwosc..
jesli mnie nie pogonisz ( ;) ) to mam w sumie jeszcze jedno male pytanie..
czy moglbys mi dac jakies wskazowki na to, jakbym mogla zrobic pasek postepu? tzn chcialabym ze jak plik sie sciaga na dysk, by pojawial sie pasek postepu sciagania..

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