Visualizzazione dei risultati da 1 a 6 su 6

Discussione: ottenere Mb Scaricati

  1. #1

    ottenere Mb Scaricati

    ragazzi come da titolo ho fatto un programma che scarica via ftp dei file.... ma come faccio ad ottenere in tempo reale i mega scaricati?

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: ottenere Mb Scaricati

    Originariamente inviato da Realscorpion
    ragazzi come da titolo ho fatto un programma che scarica via ftp dei file.... ma come faccio ad ottenere in tempo reale i mega scaricati?
    Beh ... ma dipende da come/con cosa leggi lo stream di dati!!!
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    codice:
    String server="xxxx";
            String userName="xxx";
            String pw="xxx";
            FtpClient ftpClient = new FtpClient();
            try {
                ftpClient.openServer(server);
                ftpClient.login(userName, pw);
                ftpClient.cd("/");
                ftpClient.binary();
                TelnetInputStream netIn = ftpClient.list();
    BufferedReader br = new BufferedReader(new InputStreamReader(netIn));
    String linea;
    ArrayList list = new ArrayList();
    while ((linea = br.readLine()) != null) {
                list.add(linea);
    }
    int size = list.size();
    Object[][] dati = new Object[size][];
    for (int i = 0; i < size; i++) {
        dati[i] = new Object[] { list.get(i) };
    }

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Realscorpion
    codice:
    FtpClient ftpClient = new FtpClient();
    È la FtpClient quella "non documentata" della Sun in sun.net.ftp???
    Comunque io qui vedo altre cose (login, lista dei file) ma non vedo la parte che proprio fisicamente scarica i dati .....
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Originariamente inviato da andbin
    È la FtpClient quella "non documentata" della Sun in sun.net.ftp???
    Comunque io qui vedo altre cose (login, lista dei file) ma non vedo la parte che proprio fisicamente scarica i dati .....
    sì sun.net.ftp...
    per scaricare fisicamente i dati quello lo faccio al doppio click
    codice:
    public void mouseClicked(MouseEvent e) {
          if (e.getClickCount() == 2){
             JTable target = (JTable)e.getSource();
             int row = target.getSelectedRow();
             int column = target.getSelectedColumn();
    String lol=(String)target.getValueAt(row, column);
    String lol2 = lol.substring(56);
             JFileChooser chooser = new JFileChooser ();
             chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
           chooser.showOpenDialog(null);
           String file2=(chooser.getSelectedFile().getAbsolutePath());
                      String server="xxxx";
            String userName="xxxx";
            String pw="xxxxx";
            String fileName=jTextField1.getText();
            FtpClient ftpClient = new FtpClient();
            try {
    ftpClient.openServer(server);
                ftpClient.login(userName, pw);
                ftpClient.cd("/");
                ftpClient.binary();
                TelnetInputStream in = ftpClient.get(lol2);
    FileOutputStream out =
    new FileOutputStream(file2 + "/" + lol2);
    int i = 0;
    byte[] bytesIn = new byte[1024];
    while ((i = in.read(bytesIn)) >= 0) {
    out.write(bytesIn, 0, i);
    }
    out.close();
    in.close();
    }
    non avevo capito bene cosa volevi dire con scaricare.. pensavo la lista dei file..

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Realscorpion
    sì sun.net.ftp...
    Innanzitutto partiamo da qui: questa FtpClient è fornita dalla Sun ma è non documentata e non supportata. Oltretutto offre funzionalità solo di "basso" livello. Lo vedi bene anche tu dal fatto che essa ti fornisce la lista dei file in modo molto "crudo" ovvero l'elenco dei file formattato riga x riga proprio come lo fornisce un comando (es. "dir" oppure "ls" su Linux) del sistema operativo. Lasciando a te il compito di "sapere" a quali colonne ci sono i dati di tuo interesse (ed eventualmente convertirli in qualche modo, es. la dimensione).

    E il fatto che il formato delle righe dipende fortemente dal sistema operativo dove risiede il server FTP a cui ti colleghi pone limiti e problemi in più. Se ti colleghi al server ftp://pincopalla.com che usa Unix, il formato delle righe è di un certo tipo. Se ti colleghi ad un server ftp://tiziocaio.com che usa Windows, il formato delle righe è ancora un altro ben differente.

    Morale della favola: se questo programmino lo stai facendo per esercizio "didattico", per tuo uso e basta o poco più .... ok va bene. Se intendi fare qualcosa di un po' più serio, magari da distribuire ... allora dimentica la FtpClient della Sun e orientati su qualche altra libreria di FTP client più seria e "robusta" (nonché documentata e supportata).

    Originariamente inviato da Realscorpion
    per scaricare fisicamente i dati quello lo faccio al doppio click
    Purtroppo è molto sbagliato, sotto diversi punti di vista.

    Innanzitutto tutto questo codice lo esegui direttamente a seguito di un evento, ovvero sei nel contesto del EDT. La operazione di login e ancora di più quella di download è potenzialmente lenta/lunga. E visto che stai tenendo tu impegnato il EDT, questo comporta il fatto che tutta la tua interfaccia utente è praticamente "congelata" ... non responsiva.

    È la solita questione del threading in Swing .... di cui ormai ne parlo sul forum con cadenza quasi settimanale!!

    L'altro punto dolente del tuo codice è proprio la scrittura e struttura del codice. In quella trentina di righe fai tutto quanto mescolato insieme: gestione dell'evento, scelta del file, connessione e login al server, lettura dal server, scrittura su file ecc...
    Non vedo nemmeno una valida/seria gestione delle eccezioni.

    No, non va bene. Non mi stancherò mai di ripeterlo: spezza, incapsula, separa e ancora incapsula!!! La programmazione ad oggetti serve per questo .... non per scrivere una accozzaglia di roba tutta mescolata e impastata insieme, che A) non si capisce nulla e B) è poco gestibile/manutenibile!!!!

    E poi infine ... quale è la difficoltà nel determinare, durante la progressione del download, la quantità di byte scaricata fino a quel momento??? Tu dal server leggi tanti pezzetti della risorsa remota, lo fai in un ciclo in cui con la read() leggi un tot (max 1024) di byte per volta.

    Tieni una variabile inizialmente a 0 e ad ogni ciclo aggiungi ciò che ritorna la read(). Quella è la dimensione scaricata fino a quel momento!!!!

    P.S. no, mi dispiace dirlo ... così il codice non va.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.