Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 18
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2007
    Messaggi
    99

    [java] copiare un intera cartella

    sto sviluppando un'applicazione lato server che si occupa della modifica di alcune pagine web,però per poter visualizzare le pagine dovrei copiarle nella directory del server e mi chiedevo se è possibile con java copiare un'intera cartella compresi file e sottocartelle senza fare troppi casini.
    voi che dite?
    f4s4n0

  2. #2
    Utente di HTML.it
    Registrato dal
    Mar 2007
    Messaggi
    99
    nessuno sa niente???ho fatto una cosa simile per copiare dei file con java,usando il metodo copyTo,se uso la stessa cosa per la directory vine compiato anche il suo contenuto???
    f4s4n0

  3. #3
    Utente di HTML.it L'avatar di Ed_Bunker
    Registrato dal
    Jul 2003
    Messaggi
    1,119
    Apri la cartella, apri ogni "risorsa" all'interno della cartella, se e' un file lo copi altrimenti (Se e' una cartella) vai ricorsivamente su tale sottodirectory.
    Semplice funzione ricorsiva.

  4. #4
    Utente di HTML.it
    Registrato dal
    Jun 2007
    Messaggi
    63
    Ciao a tutti, ho anche io un problema molto simile.
    In pratica devo copiarel'intero contenuto di una cartella (che contiene un numero di file che non conosco - nessuna subdirectory) in un'altra.

    Ho scritto qualche riga di codice come linea-guida, ma sono certo che esista qualcosa di più semplice:

    codice:
    public void Funzione(String dir, String newdir){
    		File file = new File(dir);
    		if((file == null) || (!file.isDirectory()))
    			System.out.println("Errore - la directory "+dir+" non esiste");
    		if(!file.canRead())
    			System.out.println("Errore - impossibile aprire la directory "+dir+".");
    
    
    		String[] lista = file.list();
                    //crea la directory specificata
    		creaDir(newdir);
    		for(int i = 0; i < lista.length; i++){
    			File f1 = new File(lista(i));
    			if (f1.isFile()){
    				File f2 = new File(newdir+"/"+f1.getName());
                                    //fatto ciò come copio il contenuto del file f1 in f2??
    				f1.delete();
    			}
    			
    		}
    
    	}
    Oltre al problema di copiare il contenuto del file f1 in f2 ho anche un altro problemino: il controllo if (f1.isFile()) mi restituisce sempre false. Cosa sbaglio?

    Grazie a tutti.

  5. #5
    Utente di HTML.it
    Registrato dal
    May 2006
    Messaggi
    120
    f1.isFile() ti da false perchè non ti crea il file...

    File f1 = new File(lista);
    lista è un array, immagino che tu debba fare
    File f1 = new File(lista[i]);

  6. #6
    Utente di HTML.it
    Registrato dal
    Jun 2007
    Messaggi
    63
    Il forum non riporta [ i] che è invece presente nel codice che ho immesso! Forse lo confonde con il tag italic ...
    Quindi il problema non dipende da quello!

    Nota: ho sostituito [i] con (i) nel codice per visualizzarlo!

  7. #7
    Utente di HTML.it
    Registrato dal
    Jun 2007
    Messaggi
    63
    Ho modificato la funzione in questo modo:
    codice:
    public void Archivia(String dir, String newdir){
    		//in dir specifichi il path da esplorare
    		File file = new File(dir);
    		File dest = new File(newdir);
    		if((file == null) || (!file.isDirectory()))
    			System.out.println("Errore - la directory "+dir+" non esiste");
    		if(!file.canRead())
    			System.out.println("Errore - impossibile aprire la directory "+dir+".");
    
    
    		String[] lista = file.list();
    		creaDir(newdir);
    		for(int i = 0; i < lista.length; i++){
    			File f1 = new File(lista(i));
    			//Move file to new directory
    			boolean success = f1.renameTo(new File(dest, f1.getName()));
    			if (!success) {
    			    System.out.println("problema");
    			}
    			
    		}
    		
    	}
    E, ovviamente, mi restituisce "problema" per ogni file presente nella directory.
    La cosa non dipende dalla funzione creaDir() perchè se la commento ottengo lo stesso risultato.
    Secondo voi da che dipende?

  8. #8
    Utente di HTML.it
    Registrato dal
    Mar 2007
    Messaggi
    99
    non so se ti può aiutare,ma io per copiare due file uso un modo diverso dal renameTo col quale avevo avuto problemi anche io.in pratica prendo il file di origine lo leggo byte per byte e in parallelo lo copio in quello di destinazione.Cosi mi funziona bene.questo è il codice:

    codice:
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    
    
    public class Copia{
    
       
    
        public static void Copiafile(String orig,String dest){
        try{
         FileInputStream in = new FileInputStream(orig);
         FileOutputStream out = new FileOutputStream(dest);
            while(true) {
            int data = in.read();
                if(data == -1)
                    break;
                else
                    out.write(data);
            }
         in.close();
         out.close();
        }
        catch (Exception e){
            e.printStackTrace();
        }
        
        }
    }
    è chiaro che io qui conosco il nome del file da copiare(path assoluto).tu però puoi saperlo con la getName(che già utilizzi)e creare il nuovo file in newdir+'/'+ fl.GetName()
    f4s4n0

  9. #9
    Utente di HTML.it
    Registrato dal
    Jun 2007
    Messaggi
    63
    Sto ancora cercando di aggiustare il mio codice perchè grazie ai suggerimenti di f4s4n0 mi sn venute in mente un paio di dubbi... e infatti c'è qualcosa che non fila.

    Innanzitutto perchè se scrivo
    codice:
    File dest = new File(newdir+"/"+f1.getName());
    System.out.println(dest.toString());
    Ottengo in output:

    config\archivio\config 26-giu-2007 18.39.08.xml

    Ovvero ci sono i backslash invece degli slash? Potrebbe essere questo il problema?

  10. #10
    Utente di HTML.it
    Registrato dal
    Jun 2007
    Messaggi
    63
    Amen, ce l'ho fatta!
    Il problema non era nel nuovo file, ma in quello vecchio!

    Riporto il codice corretto di seguito:
    codice:
    public void Archivia(String dir, String newdir){
    		//in dir specifichi il path da esplorare
    		File file = new File(dir);
    		if((file == null) || (!file.isDirectory()))
    			System.out.println("Errore - la directory "+dir+" non esiste");
    		if(!file.canRead())
    			System.out.println("Errore - impossibile aprire la directory "+dir+".");
    
    
    		String[] lista = file.list();
    		creaDir(newdir);
    		for(int i = 0; i < lista.length; i++){
    			File f1 = new File(dir, lista(i));
    			//Move file to new directory
    			File dest = new File(newdir+"/"+f1.getName());
    			boolean success = f1.renameTo(dest);
    			if (!success) {
    			    System.out.println("problema");
    			}
    		}
    		
    	}
    Andando a leggere nella lista con il comando File f1 = new File(lista(i));prelevava solo i nomi dei file e perdeva il riferimento della directory di partenza! Usando File f1 = new File(dir, lista(i)); il problema è risolto!

    Grazie a tutti x l'aiuto!

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 © 2026 vBulletin Solutions, Inc. All rights reserved.