Visualizzazione dei risultati da 1 a 7 su 7

Discussione: [JAVA] RenameTo

  1. #1
    Utente di HTML.it
    Registrato dal
    May 2007
    Messaggi
    29

    [JAVA] RenameTo

    Ciao a tutti, qualcuno sa dirmi come mai non riesco a rinominare un file all'interno di un applet mentre inserendo lo stesso codice in una classe non ho nessun problema?
    Non ho la più pallida idea del motivo, dato che i path dei files sono corretti ma il metodo mi restituisce sempre false!!!

    private boolean renameFile(String sIn, String sOut)
    {
    File fileIn = new File(sIn);
    File fileOut = new File(sOut);
    boolean bRen = fileIn.renameTo(fileOut);
    return bRen;
    }

    Grazie a tutti

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320

    Moderazione

    Java viene trattato nell'apposito sub-forum.

    Ti sposto.


    Per quanto riguarda il tuo problema: le applet non possono accedere al FileSystem per ragioni di sicurezza. Per poter effettuare operazioni particolari con le applet esse necessitano di essere certificate.

    PRova a fare una ricerca nel forum riguardante la Firma delle Applet.



    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
    Utente di HTML.it
    Registrato dal
    May 2007
    Messaggi
    29
    Ok, scusa l'errore di post.
    In realtà la mia applet è firmata e scrive un file in un dato percorso.
    Il problema sta nel fatto che lo stesso file deve essere caricato da una procedura esterna che accetta solo l'estensione xml, ma talvolta capita che il file prodotto venga caricato solo parzialmente, come se fosse stato tagliato in un punto qualsiasi dell'xml. Dato che il mio file è sicuramente corretto poichè lo verifico dopo la scrittura, potrebbe essere che il demone carichi il file non ancora completamente scritto. A tale scopo vorrei creare il file senza estensione e poi andare a rinominarlo, ma non riesco, renameTo mi restituisce sempre false.

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Se renameTo() restituisce false è molto probabile che il file sia ancora in uso da chi lo ha creato (è per questo che non è completo??).

    Ricorda che chi crea il file deve sempre preoccuparsi di chiuderlo alla fine dell'elaborazione e non sarebbe male nemmeno un flush() ad ogni scrittura per prevenire eventuali problemi di buffering.


    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

  5. #5
    Utente di HTML.it
    Registrato dal
    May 2007
    Messaggi
    29
    Grazie per la risposta!
    In effetti il dubbio che il problema sia dato dal fatto che il file sia ancora in uso l'ho avuto, ma non esiste un metodo per chiudere l'oggetto File, bensì chiudo il DataOutputStream costruito sul FileOutputStream a cui ho passato l'oggetto File.
    La flush viene fatta subito dopo la scrittura e prima della chiusura.

    E' probabile che il problema stia proprio nel file bloccato, perchè ho provato a ridurre al minimo l'applet e in effetti la rename funziona... ma non riesco a capire perchè non vada nell'altra, il codice è praticamente lo stesso!!!

    ...
    public void paint(Graphics g)
    {
    super.paint(g);
    printFile();
    boolean bOk = renameFile(sFileIn, sFileOut);
    g.drawString("Esito: " + (bOk?" positivo":" negativo"), 25,25);
    }

    private void printFile()
    {
    File output = new File(sFileIn);

    DataOutputStream dos = new DataOutputStream(new FileOutputStream(output));
    dos.writeBytes(sTxtFile);
    dos.flush();
    dos.close();
    }

    private boolean renameFile(String sIn, String sOut)
    {
    boolean bOK = false;
    File fileIn = new File(sIn);
    if(fileIn.exists())
    {
    File fileOut = new File(sOut);
    bOK = fileIn.renameTo(fileOut);
    }
    return bOK;
    }

  6. #6
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Sì, la close va fatta sul DataOutputStream, ovviamente.

    Non è che per caso c'è un loop? (qualche while che cicla all'infinito?)


    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
    May 2007
    Messaggi
    29
    Si, un loop c'è ma non cicla all'infinito, cmq credo di aver individuato il problema, dato che ho sfoltito al minimo l'applet e ha cominciato a funzionare. Probabilmente ci sarà qualche cavolata, ora vedo di capire quale sia. Grazie per l'aiuto, 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.