Exception après renommage et déplacement d'un fichier
Bonjour,
J'ai un problème avec un programme que je développe, je renomme un fichier parce que son nom n'est pas correct et une fois renommé je le déplace dans un autre répertoire.
Tout se passe bien, le fichier est renommé et déplacé mais je me prends quand même une exception dans la tronche.
J'utilise l'API WatchService pour détecter un ajout de fichier dans un répertoire, je récupère ce fichier, le traite et l'envoie dans un autre répertoire selon le résultat.
Je vous file les morceaux de codes qui me posent problème :
Ici j'utilise une méthode qui vérifie si le nom du fichier est correct, si ce n'est pas le cas, j'utilise une autre méthode qui permet de changer le nom du fichier :
Code:
1 2 3 4 5 6 7 8 9
| if( checkFileName( filePath ) == false ) {
filePath = changeFileName( filePath );
fileName = filePath.toString().substring(filePath.toString().lastIndexOf("\\") + 1);
//on vérifie si le nom modifié est compatible
if( checkFileName( filePath ) == false ) {
fileIsOk = false;
listOfMessages.add( "nom du fichier incorrect.\n" );
}
} |
Code de la méthode de modification du nom :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| public Path changeFileName(Path filePath) {
Path filePathChanged = filePath;
String newFileName;
String pathString = filePath.toString();
File theFile = new File(pathString);
String oldFileName = pathString.substring( pathString.lastIndexOf( "\\" ) + 1 );
newFileName = oldFileName.replace( " " , "_" ).replace( "é" , "e" ).replace( "è" , "e" ).replace( "ù" , "u" ).replace( "à" , "a" ).replace( "ç" , "c" );
pathString = pathString.replace( oldFileName , newFileName );
File theFileRenamed = new File(pathString);
theFile.renameTo(theFileRenamed);
filePathChanged = stringToPath( pathString );
return filePathChanged;
} |
Code qui pose problème selon moi :
Code:
1 2 3 4 5 6 7 8 9 10
| if( fileIsOk ) {
moveFile( filePath, ressourcesPath );
//on récupère le fichier déplacé
File fileMoved = new File( ressourcesPath.toString() + "\\" + fileName );
//on compare la taille du fichier déplacé avec son ancienne taille
if( ! ( fileLength == fileMoved.length() ) ) {
moveFile(stringToPath(ressourcesPath.toString() + "\\" + fileName), errorPath);
listOfMessages.add("la taille du fichiers à été modifiée pendant le transfert.");
}
} |
L'exception qui est levée est celle ci :
Code:
1 2 3 4 5 6 7 8 9 10
| java.nio.file.NoSuchFileException: C:\Users\rfontaine\eclipse-workspace\RessourcesCreatorV0\deposit\incorect_Name.png
at sun.nio.fs.WindowsException.translateToIOException(Unknown Source)
at sun.nio.fs.WindowsException.rethrowAsIOException(Unknown Source)
at sun.nio.fs.WindowsException.rethrowAsIOException(Unknown Source)
at sun.nio.fs.WindowsFileCopy.move(Unknown Source)
at sun.nio.fs.WindowsFileSystemProvider.move(Unknown Source)
at java.nio.file.Files.move(Unknown Source)
at com.absyss.vbam.ressourcescreator.v0.RessourcesCreator.moveFile(RessourcesCreator.java:236)
at com.absyss.vbam.ressourcescreator.v0.RessourcesCreator.run(RessourcesCreator.java:104)
at com.absyss.vbam.ressourcescreator.v0.RessourcesCreatorMain.main(RessourcesCreatorMain.java:17) |
Je ne comprends pas pourquoi ça plante, tout se passe bien, ça fonctionne comme je veux mais ça merde à la fin et je n'ai aucune idée du pourquoi du comment...
HELP !