Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2006
    Messaggi
    120

    [java] cancellare un file

    Ho questo problemino, devo prendere dei files remoti, manipolarli in locale creando un nuovo file e poi spedire in remoto il file creato.

    Ho una funzione che mi legge i file da remoto e me li salva in locale, dopodichè chiamo una execute a cui passo i files locali e il nome del file finale ancora da creare

    codice:
    String destLocaleFilename = execute(sourceFiles, tempDestFileName);
    String destRemoteFilename = put(destLocaleFilename,destPath);
    per spiegarmi meglio
    sourceFiles è un array di files -> sono i files che mi sono già salvata in locale
    tempDestFileName è una stringa ed è il nome del file che deve essere creato
    destLocaleFilename è il nome del file effettivamente creato, solo il nome.. se la execute va a buon fine ho sulla mia directory temp il file creato.
    destRemoteFilename è il nome del file salvato in remoto, se coindice con quello aspettato vuol dire che la put è andata a buon fine cioè che ha preso il mio file finale in locale e lo ha sbattuto nella rete.

    Il problema è che se va tutto a buon fine voglio cancellare i file locali. ho fatto:
    codice:
    for (int i = 0; i < sourceFiles.length; i++)
    				sourceFiles[i].delete();
    File destFile = new File(destLocaleFilename);
    System.out.println(destFile.delete());
    questo perchè qui ho solo il nome del file e non il file vero e proprio, siccome quando lo creo se esiste già non ne crea uno nuovo ho pensato che bastasse questo per cancellarlo dal filesystem.. ma mi sbagliavo! destFile.delete() mi ritorna false.

    Allora ho pensato di cancellarlo dentro la put, tanto è l'ultima volta in cui quel file serve davvero ed ho effettivamente il file lì dentro e non solo la stringa.. ma anche di lì il destFile.delete() mi ritorna false..
    idee? posso capire *perchè* la delete non funziona? grassie

  2. #2
    Utente di HTML.it
    Registrato dal
    May 2006
    Messaggi
    120
    è da ieri che ci sto dietro e non sono risucita a risolvere io riprovo a chiedere, magari a qualcuno viene l'illuminazione:
    come ho scritto prima faccio una execute che crea il file in locale e una put che lo manda in remoto, ho controllato di non lasciare qualcosa aperto pensando che potesse essere quello a creare problemi ma ancora niente di fatto

    nella execute ho:
    codice:
    PdfReader reader = new PdfReader(new FileInputStream(
    						sourceFiles[f]));
    document = new Document(reader.getPageSizeWithRotation(1));
    if (draft)
         writer = new PdfCopy(document, out);
    else
         writer = new PdfCopy(document, new FileOutputStream(
    								destFilePath));
    document.open();
    
    ...scrivo il file...
    
    writer.freeReader(reader);
    writer.close();
    document.close();
    poi lo riapro per aggiungere un watermark ad ogni pagina
    codice:
    if (draft) {
       try {
    
            ByteArrayInputStream in = new ByteArrayInputStream(out
    							.toByteArray());
    	PdfReader reader = new PdfReader(in);
    	PdfStamper stamp = new PdfStamper(reader,
    							new FileOutputStream(destFilePath));
    
    ..aggiungo watermark...
    
    	stamp.close();
    	in.close();
    infine nella put schiaffo il file in rete
    codice:
    File file = new File(localFilePathName); //il file che ho creato nella execute
    boolean ok = putMethod(remoteFileName, file); //ok è true quindi va a buon fine
    file.delete(); //questo mi da false
    non mi sembra di aver dimenticato qualcosa di aperto sapete se esite qualche operazione da fare sul file per vedere perchè non è cancellabile??? grazie mille

  3. #3
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Se non riesce a cancellare il file significa che da qualche parte è rimasto aperto.
    Controlla che tutte le close() vengano eseguite e che non ci siano altri oggetti che usano quel 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

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.