Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    5

    [java] copiare file da hd su ftp

    Salve ragazzi,
    dopo aver fatto mille tentativi e mille ricerche senza esito positivo vi espongo il mio problema che mi perseguita da circa un mesetto.
    Devo copiare un file (txt) dall'hd del mio pc su un server ftp.
    Riesco a copiarlo ma le ultime righe del file non si copiano. E' un file di circa 1000 righe (in continuo aumento).
    Vi posto il codice che uso (preso da qui sopra un pō di tempo fa'):

    codice:
    public static void salvaSuFtp() {
            try {
    
                FtpClient ftpClient = new FtpClient("server");
    
                ftpClient.login("utente", "pass");
                ftpClient.binary();
                ftpClient.cd("/");
    
                int i = 0;
    
                byte[] bytesIn = new byte[1024];
    
                FileInputStream in = new FileInputStream("D:/.......txt");
    
                OutputStream out = ftpClient.put("nuovo.txt");
                BufferedOutputStream bout = new BufferedOutputStream(out);;
    
                while ((i = in.read(bytesIn)) >= 0) {
                    bout.write(bytesIn, 0, i);
                }
    
                // Chiudo tutto
                in.close();
                bout.close();
                ftpClient.closeServer();
    
    
            } catch (IOException ioe) {
                System.out.println("Errore:" + ioe.getLocalizedMessage());
            }
        }
    C'č qlc che non vā??

    Grazie mille.....

  2. #2
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    magari prova a forzare una flush del buffer periodicamente, gli ultimi restano appesi prima che siano completamente trasmessi.

    prima di chiudere bout fai

    bout.flush();

    non sono sicura che lo chiami in automatico la close()
    RTFM Read That F*** Manual!!!

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    5
    nada mi crea sempre su ftp il file txt al 70% circa..

  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    inizia a vedere quanti ne leggi e quanti ne scrivi correttamente (bastano sysout durante il ciclo ) e a vedere se ci sono discordanze
    RTFM Read That F*** Manual!!!

  5. #5
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Intanto, sarebbe interessante sapere che libreria stai usando, visto che la classe FtpClient non fa parte del core standard di Java... a meno che tu non stia usando sun.net.ftp.FtpClient


    Ciao.
    "Perchč spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  6. #6
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Ok, immaginando che tu stia usando le classi sun.net.ftp (che non andrebbero usate, perchč non ufficiali), questo esempio funziona perfettamente:

    codice:
    String server = "...";   // Indirizzo del server FTP
    FtpClient client = null;
    FileInputStream fis = null;
    TelnetOutputStream out = null;
    BufferedOutputStream bos = null;
    
    try {
        client = new FtpClient( server );
        client.login(utente, password);
        client.binary();
        client.cd( directory remota );
    
        fis = new FileInputStream("pippo.txt");
        out = client.put("pluto.txt");
        bos = new BufferedOutputStream(out);
    
        byte[] data = new byte[1024];
        int byteLetti = 0;
        while ((byteLetti = fis.read(data)) >= 0) {
            bos.write(data, 0, byteLetti);
        }
        bos.flush();
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        if (fis != null) {
            try {
                fis.close();
            } catch (Exception e) { }
        }
    
        if (bos != null) {
            try {
                bos.close();
            } catch (Exception e) { }
        } else {
            if (out != null) {
                try {
                    out.close();
                } catch (Exception e) { }
            }
        }
    }
    Nota anche come ho gestito le eccezioni.


    Ciao.
    "Perchč spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  7. #7
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    5
    Forse ora vā.. Almeno le prime volte tutto ok!! Ho usato il tuo codice anche se all'inizio mi dava sempre il 70% del file...
    Sbagliavo a chiamare la procedura forse..

    Comunque grazie ad entrambi.. LeleFT e Valia!!

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.