Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    [Java -Jsp - JSF] Problema creazione file txt remoto

    Salve,
    ho una applicazione web sviluppata utilizzando java/jsp/jsf che si interfaccia ad un Db MySql.
    Dovrei implementare una parte che, cliccando su un determinato link, mi legga il contenuto del DB e me lo riporti su un file di testo che poi scaricherò tramite client ftp.
    Effettuando queste operazioni in locale (sul mio pc) funziona tutto senza alcun problema.

    Il problema invece viene fuori quando devo effettuare questa operazione tramite l'applicazione web.
    Mi viene fuori l'errore:
    codice:
    java.io.IOException: Permission denied
    Vi chiedo come potrei risolvere questo problema, sembrerebbe un problema di "permessi" sui file, ma non sono riuscito a trovare una soluzione.

    Come possibile soluzione avevo pensato: creo un file di testo "vuoto" da blocco note e lo carico tramite ftp; poi effettuo le operazioni di apertura, scrittura dati e chiusura su tale file.
    Il problema, si ripresenta allo stesso modo secondo voi oppure potrebbe funzionare??

    Logicamente mi piacerebbe più trovare la soluzione al problema di fondo e non bypassarlo (sempre che sia possibile) con questa soluzione.

    Ringrazio tutti per la collaborazione.
    Ciao ciao

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Bisogna vedere cosa fai esattamente. Di certo è un problema di permessi... ma il motivo non possiamo dedurlo solo dall'errore.

    Posta un po' di codice della parte in cui cerchi di creare il file.


    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

  3. #3
    Sì, scusami tanto, hai ragione, è che ieri ho cercato di illustrare il problema velocemente.

    Comunque, questa è la parte di codice che interroga il db e posiziona i dati in un arraylist, genera il file txt, e scrive sul file di testo il contenuto dell'arraylist.
    codice:
    File file;
    FileWriter fw;
    // COPIA COD_PROD SU FILE TXT
    public String getCodProdTrasferimArticoli(){
    dao.connect();
    cercaArticoli = new ArrayList();
    cercaArticoli = (ArrayList)dao.getCodProdTrasferimArticoli();
    try{ 
    file = new File("codProd.txt");
    if(file.createNewFile()){
    System.out.println("File creato");}
    fw = new FileWriter(file); } 
    catch(IOException e){ e.printStackTrace(); } 
    for(int i = 0; i < cercaArticoli.size(); i++) { 
    Articolo art = (Articolo)cercaArticoli.get(i); 
    String cod_prod = art.getCod_prod(); 
    System.out.println("COD_ PROD: " + art.getCod_prod()); 
    try { 
    fw.write(art.getCod_prod() + "\r\n"); 
    } 
    catch(IOException e) { 
    e.printStackTrace(); 
    } 
    } try{ 
    fw.flush(); 
    fw.close(); 
    } 
    catch(IOException e){
    e.printStackTrace(); 
    }
    return "trasferminCod_ProdOK"; }
    Spero di aver chiarito ulteriormente la situazione.
    Grazie a tutti
    Ciao ciao

  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    Originariamente inviato da billymerendina

    Spero di aver chiarito ulteriormente la situazione.
    Grazie a tutti
    Ciao ciao
    in quale punto preciso hai il problema? Evidenzialo magari in grassetto.
    Io non ci vedo grossi errori
    RTFM Read That F*** Manual!!!

  5. #5
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Questa parte
    codice:
    file = new File("codProd.txt");
    if(file.createNewFile()){
    E' la probabile fonte d'errore.
    Tu stai sviluppando una WebApp, di conseguenza hai un ApplicationServer (o un Servlet Container, come Tomcat). Questo server viene avviato usando un determinato utente, il quale, evidentemente, non ha i permessi per scrivere sulla directory corrente... qual è la directory corrente? Bella domanda: nella maggior parte dei casi lo sa solo il sistema operativo.

    Ora, a parte il sapere quale sia o non sia la directory corrente, il problema è di progettazione: non puoi MAI (in generale) fare affidamento sulla directory corrente. E questo è tanto più vero nelle WebApplications. Di conseguenza, non bisogna MAI scrivere un codice come quello.

    Quando la tua WebApp ha bisogno di creare dei file, tu devi essere a conoscenza perfettamente della loro posizione sul disco del server. Come si fa? Semplice: si dà al file un percorso completo. I modi per fare questo sono svariati, ne elenco 2:

    1) Scrivere nel codice sorgente il percorso completo del file che si andrà a creare: questo è il metodo più sbagliato del mondo, ma è un metodo.

    2) Fare in modo che il percorso della directory in cui verranno creati i file sia noto all'applicazione: tramite, ad esempio, un parametro di configurazione (un buon posto potrebbe essere il deployment descriptor file: web.xml).

    Detto che il punto 1 è bene dimenticarselo e far finta che non esista, la soluzione consiste nell'adottare una strategia simile a quella del punto 2: l'applicazione ottiene il valore del parametro e lo usa. Esempio:

    Nel web.xml
    codice:
        ...
        <context-param>
            <description>Directory in cui creare i file temporanei</description>
            <param-name>tempFileDir</param-name>
            <param-value>Percorso/Completo/Alla/Directory/</param-value>
        </context-param>
    Nella servlet (o nel tuo componente):
    codice:
    // Suppongo di essere in una servlet
    String dir = getServletContext().getInitParameter("tempFileDir");
    ...
    file = new File(dir + "/codProd.txt");
    if(file.createNewFile()){
       ...
    }
    Chiaramente il codice lo dovrai adattare alla tua situazione, ma il concetto i concetti salienti sono questi:

    1) I files devono sempre essere scritti in una posizione NOTA, quindi, ben definita.
    2) Per definire la posizione dei temporanei si usa un file di configurazione (il deployment descriptor, un file XML a tua scelta, un file di properties, ecc.)
    3) Quando si deve creare il file, si preleva il percorso dalla configurazione e lo si usa.

    Chiaramente, dopo aver creato il file dovrai inviarlo al client. Per inviarlo al client dovrai leggere il file. E anche qui, per leggerlo, userai il percorso settato nel file di configurazione per sapere dove reperirlo.

    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
    Grazie per le celeri risposte, in effetti l'errore viene riscontrato proprio in quelle 2 righe di codice.

    Ora provvedo ad apportare le eventuali modifiche (ottima spiegazione LeleFT, grazie) e vi terrò aggiornati se riscontrerò altri problemi o se andrà tutto a buon fine!
    Grazie.

    Ciao ciao

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.