JAVA aggiunta testo file FTP

di il
7 risposte

JAVA aggiunta testo file FTP

Come esercizio sto cercando di creare un database non SQL appoggiandomi sull'host ALtervista.com, Per procedere avrei bisogno di scrivere i dati su un file chiamato "Dati.txt", l'operazione va a buon fine salvo per il fatto che il contenuto aggiunto sovrascrive quello preesistente e questo non va bene.
Il codice che uso è il seguente:

public void Scrivi() throws MalformedURLException, IOException
{
    /*public static void main(String[] args) */ 
        Date data = new Date();
        data.getTime();
           URL sito_01 = new URL("ftp://nomeutente:password@miosito.altervista.org/Dati.txt");
           URLConnection Connessione = sito_01.openConnection();
           Connessione.setDoOutput(true);
           Connessione.connect();
           try(BufferedWriter Scrittore = new BufferedWriter(new OutputStreamWriter(Connessione.getOutputStream())))
                {
                String Inp = data.toString() + " Testo inserito da JAVA Riga eliminabile\n";
                Scrittore.append(Inp);
                Scrittore.close();
                }

}
Ho anche provato una versione alternativa che, in ambiente desktop, funziona ma in remoto non da risultati:

public void ScriviInCoda() throws IOException
{
String Str, DaScrivi;    
Date data = new Date();
data.getTime();

DaScrivi = data.toString() + "\n";
DaScrivi = DaScrivi + "Riga inserita dal metodo ScriviInCoda().\n";


URL sito_01 = new URL("ftp://nomeutente:password@miosito.altervista.org/");
           URLConnection Connessione = sito_01.openConnection();
           Connessione.setDoOutput(true);
           Connessione.connect();
FileWriter FW = new FileWriter("Dati.txt",true);
try
    {
    FW.append(DaScrivi);
    }
catch(IOException IOE)
    {
    System.out.printf("Errore di Input Output %s", IOE);
    }
}
Grazie, buon lavoro.

7 Risposte

  • Re: JAVA aggiunta testo file FTP

    L'approccio e' ""troppo semplicistico"".
    Usare una server FTP NON E' come usare il filesystem locale.
    Una conessione FTP puo' essere fatta in modalita; "binaria" o "testo"
    Se fatta in modalita "testo", l'FTP fa delle conversioni. Non a senso ma cosi' e'!

    Inoltre non mi risulta che su un server FTP tu possa aprire un file in modalita' ""append"".
    Io non l'ho mai fatto, magari si puo' anche fare, ma probabilmente dipende anche dalla configurazione del server.
    In genere, da una server FTP si legge un INTERO file o si scrive un INTERO file.
    Non si fanno ""manipolazioni"" del contenuto del file.

    Controlla bene quello che hai fatto, e leggi la documentazione sul protocollo FTP.
  • Re: JAVA aggiunta testo file FTP

    Grazie infinite, immaginavo che non sarebbe stata una passeggiata, il lavoro duro non mi spaventa, sapere di non sforzare nella direzione sbagliata è già un'informazione importante.
  • Re: JAVA aggiunta testo file FTP

    Il FileWriter infatti non funziona, cancella solo il contenuto che, secondo me, è già rimosso dal momento in cui si richiede la connessione in scrittura, devo verificare.
  • Re: JAVA aggiunta testo file FTP

    Tremor ha scritto:


    Come esercizio sto cercando di creare un database non SQL appoggiandomi sull'host ALtervista.com, Per procedere avrei bisogno di scrivere i dati su un file chiamato "Dati.txt", l'operazione va a buon fine salvo per il fatto che il contenuto aggiunto sovrascrive quello preesistente e questo non va bene.
    Il protocollo FTP (RFC 959, https://tools.ietf.org/html/rfc95 ) in effetti ha un comando per il "append".

    Sezione 4.1.3. FTP SERVICE COMMANDS:
    [...]
             APPEND (with create) (APPE)
    
                This command causes the server-DTP to accept the data
                transferred via the data connection and to store the data in
                a file at the server site.  If the file specified in the
                pathname exists at the server site, then the data shall be
                appended to that file; otherwise the file specified in the
                pathname shall be created at the server site.
    Quindi effettivamente ... si potrebbe. Ci sono però 2 questioni:

    a) Questo comando APPEND non è detto che sia supportato da un server FTP, non è di quelli "obbligatori" che fanno parte dell'insieme "minimo" di comandi che i server FTP devono supportare. In questo momento NON ti saprei dire se il server FTP di Altervista supporta APPEND. Basterebbe fare una prova con il client FTP da linea di comando e provare il APPEND. Se fallisce con errore .... non è supportato.

    b) Stavi usando la API del package java.net (URL, Connection, ecc...) che è molto ad ALTO livello. Ed è già tanto (l'avevano fatto come "estensione") che supporti la scrittura intera di un file.
    Ammesso che APPEND sia supportato, quello che ti servirebbe è una libreria Java di "FTP Client" (ce ne sono) che sia più a "basso" livello e permetta di fare le varie operazioni FTP: change directory, listing, delete, ecc... e possibilmente anche questo append.


    P.S. usare FTP come "database non SQL" è molto rozzo come approccio. Ma se vuoi farlo come "esercizio", ovviamente ben venga.
  • Re: JAVA aggiunta testo file FTP

    Prova anche a vedere "apache commons net": e' una libreria del progetto Apache (quella di Tomcat, e n-mila altri progetti).
    Ha un supporto al protocollo FTP decisamente piu' evoluto di quello fornito dall'implementazione di default della classe URL di Java.

    http://commons.apache.org/proper/commons-net

    https://projects.apache.org/projects.html?categor
  • Re: JAVA aggiunta testo file FTP

    migliorabile ha scritto:


    http://commons.apache.org/proper/commons-net
    Infatti dal Javadoc vedo che la classe FTPClient ha il metodo:

    public boolean appendFile(String remote, InputStream local) throws IOException
  • Re: JAVA aggiunta testo file FTP

    Grazie veramente. C'è. molta carne al fuoco e poco tempo per studiare. Comunque nei prossimi giorni intendo approfondire l'argomento nel senso che mi avete indicato. A presto.
Devi accedere o registrarti per scrivere nel forum
7 risposte