2017-07-18 5 views
1

Le code ci-dessous fonctionne, mais mon problème est que la sortie de la console affiche correctement par exemple:Suppression des parties de noms de fichiers dans le dossier

3-M-ALABAMA-SUIQUARTER2 
3-M-ALABAMA-SUIQUARTER2 
3-M-ALABAMAW-22017 
3-M-ALABAMAW-22017 

La sortie ci-dessus montrent que mon index est -2017 cependant lorsque le fichier réel nom est en cours de modification dans le dossier certains noms de fichiers sont ignorés. Par exemple

nom de fichier Orginal: 3-M-ALABAMA-SUIQUARTER2-2017200346-CD6140
sortie de la console: 3-M-ALABAMA-SUIQUARTER2
Certains des fichiers dans le dossier inchangé: 3-M-ALABAMA-SUIQUARTER2-2017200346-CD6140

Cependant, certains des fichiers dans le dossier ont 3-M-BATTLECREEKMIW-22017-2017200346-CD619B et certains sont 3-M-ARLINGTONOHLOCALW-2-2017200346-CD61A8

Alors Je pense que Java est confus quant à l'endroit où couper lorsque le changement réel est fait dans l'altération de fichier? Pouvez-vous m'aider?

for(File file:filesInDir) { 
     x++; 
     String name = file.getName().substring(0, file.getName().indexOf("-2017")); 
     String newName = name; 
     System.out.println(newName); // prints prints to file 
     String newPath = absolutePathOne + "\\" + newName; 
     file.renameTo(new File(newPath)); 
} 
+0

J'ai même utilisé la méthode de sous-chaîne String name = file.getName(). Substring (0,20); et toujours la même chose tous les noms de fichiers dans le dossier ne sont pas changés – Jonathan

+0

Y a-t-il un moyen de dépasser cela? Sous-chaîne et Index-de ne fonctionnent pas pour moi dans ce cas, – Jonathan

+0

ce que vous essayez d'obtenir est de supprimer le motif -2017xxxx du nom de fichier d'origine? – assembler

Répondre

2

Okay there any other way to rename the files?

Oui. Utilisez les nouvelles classes NIO 2, en particulier la méthode Files.move().

À tout le moins, remplacer file.renameTo(new File(newPath)) avec:

Files.move(file.toPath(), Paths.get(newPath)); 

Ce jetteront exception descriptive si déplacement échoue, au lieu de la valeur de retour booléenne false de renameTo().

Vous devez également modifier le reste du code pour utiliser les classes les plus récentes. Bien que cela ne soit pas obligatoire, il est recommandé de le faire.

+0

est que File.move de goyave? – assembler

+0

@assembler Cliquez sur le lien. C'est intégré Java 7+. – Andreas

+0

Okay j'ai remplacé la ligne et je reçois une ligne rouge sous (déplacer) en éclipse – Jonathan