Newsgroup: it.comp.java
Titolo: Stranissimo problema con copia file in java (vediamo...)

Dovendo fare la copia di un file in java da una directory ad un'altra 
riscontro il seguente problema:
se lo copio nella destinazione "D:\" tutto ok, ma se lo copio in 
"D:\backup\backup_121009\firefox_profiles\marco_firefox_profiles" mi 
dice che lo ha copiato, ma il risultato ï¿œ che in tale directory il file 
non c'ï¿œ!!! Da cosa puï¿œ dipendere ??
Per capirci meglio posto il codice:
(come si vede del codice ho provato a fare la copia anche con 
FileInputStream, ma il risultato ï¿œ lo stesso.
**************************************************************************************************************
String sourceFilepath = 
"D:\\mozilla_profiles\\firefox_profiles\\marco_firefox_profiles\\URLCLA~1.TXT";
String destFilepath = 
"D:\\backup\\backup_121009\\firefox_profiles\\marco_firefox_profiles\\URLCLA~1.TXT";
//String destFilepath = "D:\\URLCLA~1.TXT";
 
try{
 
  FileChannel source = new FileInputStream(sourceFilepath).getChannel();
  FileChannel dest = new FileOutputStream(destFilepath).getChannel();
 
  source.transferTo(0, source.size(), dest);
  source.close();
  dest.close();
//FileInputStream sourceFile = new FileInputStream(sourceFilepath);
//FileOutputStream destFile = new FileOutputStream(destFilepath);
//int bufferSize = 10000;
//byte[] contentSourceFile = new byte[bufferSize];
//
//int bytesRead=0;
//while( (bytesRead = sourceFile.read(contentSourceFile)) != -1 )
//  destFile.write(contentSourceFile, 0, bytesRead);
//
//  sourceFile.close();
//  destFile.close();
 
}
   catch(Exception e){
   e.printStackTrace();		
}
 
if(new File(destFilepath).exists())
   System.out.println("COPIATO");
else
   System.out.println("NON COPIATO");
**************************************************************************************************************
Grazie veramente a chi ci capisce qualcosa !
 

 non c'è!!! Da cosa può dipendere ?? [...]
Il tuo codice prova a sovrascrivere la directory di destinazione con il 
file ed infine controlla se la directory stessa esiste.
-- 
Enos /* looking4work */


Cosa fa lo so, l'ho scritto io !

 Cosa fa lo so, l'ho scritto io !
destFilepath = "D:\" // OK
destFilepath = "D:\....\marco_firefox_profiles"  // MANCA IL FILE
destFilepath = "D:\....\marco_firefox_profiles\"  // OK
destFilepath = "D:\....\marco_firefox_profiles\URLCLA~1.TXT"  // OK
-- 
Enos

 non c'�!!! Da cosa pu� dipendere ??
Se in cos� va e col� no, non credo sia un errore di programma.
Per il momento mi viene in mente solo una cosa. In Windows i nomi del 
Tip XXXXX~1.EEE sono le "versioni corte" dei nomi lunghi. Puo darsi, che 
ho i quella directory c'e gia un file con un nome, ma per esempio 
"Urlclassifier.txt" che ha il nome corto URLCLA~1.TXT e perci� invece 
die creare un nuovo file in effetti scrivi su un file gi� esistente?
claudio

   dest.close();
comincia a fare un po' di test sui due file, per vedere se
effettivamente li apri oppure c'e' qualche problema.
a me non piace per niente come hai scritto il path ad esempio.
potresti avere problemi sui permessi di lettura/scrittura dei files/
directory.
Ciao Jack


se rileggi il codice il nome del file c'è!!

 claudio
Interessante, nn ci avevo pensato.
Perï¿œ, come ho scritto, se lo creo in D:\\ me lo crea effettivamente con 
quel nome.
Nella directory originale in effetti ci sono i files:
urlclassifierkey3.txt
urlclassifier3.sqlite
L'errore ï¿œ scomparso facendo cosï¿œ:
ho cancellato tali files dalla directory originale. Siccome sono files 
di firefox ho riavviato firefox e quelli con ~ nel nome non sono stati 
ricreati -> conclusioni: la copia ï¿œ avvenuta correttamente, perchï¿œ ho 
poi fatto la prova con un software che controlla presenza e contenuto 
dei files contenuti in 2 directories.
Spero di essere stato chiaro, altrimenti fammi domande!

 
Come ho scritto a claudio neider, ho cancellato tali files, riavviato 
firefox e poi la copia � avvenuta bene.
Comunque prima avevo fatto un test con un altro programma java semplice 
che verificava la presenza del file
if(new File(destPath).exists()){
	System.out.println("ESISTE");
else System.out.println("NON ESISTE");
... e ricevevo risposta che esisteva!! BAh....
Mi interessa la nota che mi hai fatto sui path:
un consiglio su come scriverli diversamente ?
Tieni conto che il codice che ho scritto � semplificato e mirato a far 
capire come avveniva la copia. In realt� � il programma a costruire il 
path, andando a leggere il contenuto della directory principale.
Per ottenere il carattere di separazione tra directory ho usato
"System.getProperty("file.separator");"
grazie a tutti

 non c'è!!! Da cosa può dipendere ?? [...]
A me, indicando nella destinazione il nome del file, il tuo codice 
funziona con qualsiasi directory, ma a differenza di te uso un vero 
sistema operativo (Linux) e non un giocattolo (Windows).
Sono un po' stanco dei tuoi punti esclamativi, quindi ti faccio gli 
auguri e smetto di provare ad aiutarti.
Saluti
-- 
Enos

 Saluti
Sei stanco nessun problema, non esistono obblighi