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 de la méthode de modification du nom :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 qui pose problème selon moi :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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; }
L'exception qui est levée est celle ci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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."); } }
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...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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)
HELP !
Partager