Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1

    Rinominazione di un file

    Salve a tutti, io ho scritto questo codice per rinominare il file, solo che non funziona, sapete il perchè e come risolvere il problema?

    codice:
    		/**
    		* Rinomina i file della cartella
    		* 
    		* @param file to rename
    		* @throws Exception
    		*/
    		private static void renameFile(File file) throws Exception {
    
    			File newFile = new File(PATH_DESKTOP + "Dovumento_di_prova.txt");
    		  try {
    			
    		    boolean rename = file.renameTo(newFile);
    		    
    		    if (!rename) {
    		      System.err.println("Errore nel rinominare il file");
    		    } else {
    		      System.out.println("File rinominato con successo: " + "");
    		    }
    		  } catch (Exception e) {
    		    System.err.println(e.getMessage());
    		  }
    		}
    Grazie in anticipo a tutti.

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Quel metodo funziona se la variabile PATH_DESKTOP è correttamente valorizzata.
    Se non funziona, il perchè lo puoi sapere solo tu... poichè solo tu puoi sapere se tale variabile è correttamente valorizzata.

    Devi fare un po' di debug, magari facendoti stampare i valori delle variabili.

    PS: il metodo renameTo() non solleva eccezioni checked: può sollevare una NullPointerException se l'oggetto File passato è nullo o una SecurityException se c'è qualche restrizione di sicurerzza (generalmente, solo nelle Applet), quindi il try/catch è piuttosto "inutile"... ed, in ogni caso, dovresti sempre far stampare lo stackTrace dell'eventuale eccezione sollevata. Il message è troppo restrittivo.


    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
    Ho fatto già da subito quello che mi hai detto ... e la lista dei file contenuti in quel path la vedo tutta con tutti i nomi corretti.

    Ho risolto riscriverdo tutti i file in una nuova cartella con il nome che mi serviva, però questa operazioni è del tutto poco effiente... ho scritto il codice qui in basso.

    Sai dirmi un modo per rinominare semplicemente i file?


    codice:
    /**
    		 * @param args
    		 * @throws Exception 
    		 */
    		public static void main(String[] args) throws Exception {
    
    			System.out.println("");
    			String files[] = getLlistFile(PATH_ANIME_FOLDER);
    			
                            printStringArray(files);
    						
    			File[] f = getListFile(PATH_ANIME_FOLDER);
    			saveFile(f, PATH_FOLDER);
    			
    			
    		}
    		
    		/**
    		 * Prende tutti  i nomi dei file contenuti nella cartella.
    		 * @param path - path della cartella.
    		 * @return files - array di stringa inside the name of all file. 
    		 */
    		public static String[] getLlistFile(String path) {
    
    			File f = new File(path);
    			String[] files = f.list();
    			
    			return files;
    		}//end method
    		
    		/**
    		 * Prende tutti i file nella cartella specificata.
    		 * 
    		 * @param path - path della cartella
    		 * @return files - array di file
    		 */
    		public static File[] getListFile (String path) {
    			
    			File f = new File(path);
    			File[] files = f.listFiles();
    			
    			return files;
    		}
    
    		/**
    		 * Stampa tutti i valori all'interno di un array di stringa
    		 * @param string - array of string to print every element.
    		 */
    		public static void printStringArray(String[] string){
    			
    			for (int i = 0; i < string.length; i++)
    				System.out.println(string[i]);	
    		}//end method.
    		
    		
    		
    		/**
    		 * 
    		 * @param t - lista dei file
    		 * @param sv - percorso dove mettere i nuovi file
    		 * @throws IOException
    		 */
    		private static void saveFile(File[] t, String sv) throws IOException
    		 {
    			for (int i = 0; i < t.length; i++) {
    				
    				File nFile = new File(sv+"/" + getTextTo000(t.length, i));
    				
    				   System.out.println(nFile.getName());
    				   System.out.println(nFile.getPath());
    
    				   riscrizioneFile(t, i, nFile);
    			}
     
    		 }//end method
    		
    		/**
    		 * 
    		 * @param count
    		 * @param i
    		 * @return
    		 */
    		private static String getTextTo000 (int count, int i){
    			
    			String name = "";
    			
    				if (i <= 9)
    					name = "00" + i;
    				else if (i > 9)
    					name = "0" + i;
    				else if (i > 99)
    					name = "" + i;
    				else 
    					System.err.print("Errore calcolo del testo " + " *** " + i);
    
    			return name + ".jpg";
    		}
    		
    		/**
    		 * Scrive fisicamente i file su disco
    		 * 
    		 * @param t - array di file.
    		 * @param i - indice.
    		 * @param nFile - File da scrivere con il nome corretto.
    		 * @throws IOException
    		 */
    		private static void riscrizioneFile (File[] t, int i, File nFile) throws IOException{
    			
    			   try {
    				    
    			        FileChannel sourceChannel = new FileInputStream(t[i]).getChannel();
    			           FileChannel destinationChannel = new FileOutputStream(nFile).getChannel();
    			           sourceChannel.transferTo(0, sourceChannel.size(), destinationChannel);
    
    			       sourceChannel.close();
    			       destinationChannel.close();
    			   } catch (FileNotFoundException e) {
    				   e.printStackTrace();
    			}
    
    		}

  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    ma tu devi rinominare un file o parte del path di un file?
    RTFM Read That F*** Manual!!!

  5. #5
    Devo rinominare un file

  6. #6
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    no a quanto vedo tu stai rinominando parte del path, non il nome quindi è logico che renameTo così come lo avevi scritto non vada.


    Distingui i passi:

    1. prendi il file con path assoluto (o canonical sarebbe meglio)
    2. prendi il nome del file
    3. costruisci il nuovo direttorio
    4. copia

    codice:
    File fileToCopy = new File("path"); 
    
    File destDir = new File("destDir");
    if (!destDir.exist()){
      destDir.mkdirs(); 
    }
    File destination = new File(destDir, fileToCopy.getName()); 
    
    if (!destination.exist()){
      destination.createNewFile(); 
    }
    
    fileToCopy.renameTo(destination);
    non l'ho provato, ma dovrebbe andare
    RTFM Read That F*** Manual!!!

  7. #7
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Nel tuo codice c'è sicuramente un errore concettuale e una inefficienza:

    L'errore concettuale risiede nel metodo getTextTo000():

    codice:
    private static String getTextTo000 (int count, int i){
    
       String name = "";
       if (i <= 9)
          name = "00" + i;
       else if (i > 9)
          name = "0" + i;
       else if (i > 99)
          name = "" + i;
       else 
          System.err.print("Errore calcolo del testo " + " *** " + i);
       return name + ".jpg";
    }
    La parte in grassetto non verrà mai eseguita, poichè se la variabile "i" è maggiore di 99 a maggior ragione sarà maggiore di "9", quindi viene intercettata nel caso precedente. Questo può dar luogo a valori come "0100", che presumibilmente non ti vanno bene (vorresti avere "100"). Da rivedere: inverti l'ordine dei confronti.

    Poi c'è un'inefficienza nel main:

    codice:
    String files[] = getLlistFile(PATH_ANIME_FOLDER);
    
    printStringArray(files);
    
    File[] f = getListFile(PATH_ANIME_FOLDER);
    saveFile(f, PATH_FOLDER);
    Perchè ottenere nuovamente lo stesso identico array? Ce l'hai già, si chiama "files", usa quello.

    Per il resto non ho controllato, ma verifica che la directory esista, prima di effettuare la rinomina.

    @valia: "direttorio" proprio non lo posso sentire...

    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

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

    @valia: "direttorio" proprio non lo posso sentire...

    Ciao.
    colpa dei miei colleghi di ufficio!!
    Giuro prima non lo dicevo

    ihihi il punto è che quando lo senti tante volte ogni gg poi lo dici senza che te ne rendi conto....directory, va bene?
    RTFM Read That F*** Manual!!!

  9. #9
    vi ringrazio per le correzion degli errori logici , ma come al solito mi esprimo male

    Allora il mio obbiettivo è rinominare una sequenza di file. Dato che con il primo metodo che ho postato non funzionava ho riscritto il prigramma nel secondo modo.
    Il secondo praticamente mi prende tutti i file in una cartella e me li copia in un altra col nome modificato. E funziona.
    Tuttavia il mio obbiettivo è rinominare semplicemente i file, senza doverli copiare... E questo non ho ancora capito come fare.

  10. #10
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    ti ho già detto come fare!!!!

    allora tu hai il file file1 che ha questo percorso

    /questo/path/va/al/file/file1

    tu vuoi questo

    /questo/path/va/al/file/file2

    e niente file1

    oppure

    /voglio/andare/al/mare/file1

    ??

    come ti ho scritto io dovrebbe andare in entrambi i casi
    RTFM Read That F*** Manual!!!

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.