OVH Cloud OVH Cloud

Renommer des fichiers

2 réponses
Avatar
Gart
Bonjour à tous,
voila mon problème : je veux renommer une liste de fichiers dans un
repertoire. Les fichiers doivent être inversés, c'est à dire que j'ai
ceci: et je dois avoir la correspondance :
fichier1 fichier5
fichier2 fichier4
fichier3 fichier3
fichier4 fichier2
fichier5 fichier1

Voila le bout de code que j'utilise :

String prems = null;
String deuz = null;
File[] tabFiles = null;
if(cardDir != null && cardDir.isDirectory()){
tabFiles = cardDir.listFiles();
int totFiles = tabFiles.length;
for(int cpt=0;cpt<totFiles/2;cpt++){
prems = tabFiles[cpt].getName();
deuz = tabFiles[totFiles-1-cpt].getName();
boolean ret = false;
String tempdir = System.getProperty("user.dir")+"/data/";
File dest = new File(tabFiles[totFiles-1-cpt].getAbsolutePath()+"temp");
ret = tabFiles[cpt].renameTo(dest);
if(ret){
Trace.println("Rename successful");
tabFiles[cpt] = dest;
}
else {
System.err.println("Error while renamingTo");
}
dest = new File(prems);
ret = tabFiles[totFiles-1-cpt].renameTo(dest);
if(ret){
Trace.println("Rename successful");
tabFiles[totFiles-1-cpt] = dest;
}
else {
System.err.println("Error while renamingTo");
}
dest = new File(deuz);
ret = tabFiles[cpt].renameTo(dest);
if(ret){
Trace.println("Rename successful");
tabFiles[cpt] = dest;
}
else {
System.err.println("Error while renamingTo");
}
}
}
Je renomme donc chaque pair de fichiers en trois temps.
Au début, je ne faisais pas de réaffectation du nouveau fichier dans le
tableau, j'ai essayé comme cela pour voir si c'était mieux, mais non.
Je me retrouve avec un fichier5temp, plus de fichier1 et toujours le
fichier5 de départ.
Je ne comprend pas mon erreur. Si quelqu'un peut m'éclairer ou à une
autre idée, je suis tout ouïe.

D'avance merci,
Gart.

2 réponses

Avatar
Erwan Arzur
Gart wrote:
Bonjour à tous,
voila mon problème : je veux renommer une liste de fichiers dans un
repertoire. Les fichiers doivent être inversés, c'est à dire que j'ai
ceci: et je dois avoir la correspondance :
fichier1 fichier5
fichier2 fichier4
fichier3 fichier3
fichier4 fichier2
fichier5 fichier1

Voila le bout de code que j'utilise :

String prems = null;
String deuz = null;
File[] tabFiles = null;ç
if(cardDir != null && cardDir.isDirectory()){
tabFiles = cardDir.listFiles();
int totFiles = tabFiles.length;
for(int cpt=0;cpt<totFiles/2;cpt++){
prems = tabFiles[cpt].getName();
deuz = tabFiles[totFiles-1-cpt].getName();
boolean ret = false;
String tempdir = System.getProperty("user.dir")+"/data/";
File dest = new
File(tabFiles[totFiles-1-cpt].getAbsolutePath()+"temp");
ret = tabFiles[cpt].renameTo(dest);
if(ret){
Trace.println("Rename successful");
tabFiles[cpt] = dest;
}
else {
System.err.println("Error while renamingTo");
}
dest = new File(prems);
ret = tabFiles[totFiles-1-cpt].renameTo(dest);
if(ret){
Trace.println("Rename successful");
tabFiles[totFiles-1-cpt] = dest;
}
else {
System.err.println("Error while renamingTo");
}
dest = new File(deuz);
ret = tabFiles[cpt].renameTo(dest);
if(ret){
Trace.println("Rename successful");
tabFiles[cpt] = dest;
}
else {
System.err.println("Error while renamingTo");
}
}
}
Je renomme donc chaque pair de fichiers en trois temps.
Au début, je ne faisais pas de réaffectation du nouveau fichier dans le
tableau, j'ai essayé comme cela pour voir si c'était mieux, mais non.
Je me retrouve avec un fichier5temp, plus de fichier1 et toujours le
fichier5 de départ.
Je ne comprend pas mon erreur. Si quelqu'un peut m'éclairer ou à une
autre idée, je suis tout ouïe.


comme tu modifies tabFiles pendant ton traitement, ça doit se mélanger
très fort les pinceaux, surtout, quand dans un tableau avec un nombre
impair de postes, le début et la fin se rejoignent ...

Moi j'aurais fait une copie du tableau d'origine trié dans le nouveau
sens (avec les Collections, c'est très facile) et j'aurai parcouru les
deux tableaux en même temps en faisant des rename ... inconvénient : ça
prend plus de place en mémoire ...

Avatar
Gart
Merci pour l'idée des collections, je vais regarder.
Sinon, je sais que c'est mal de toucher au tableau. Au début je n'y
touchais pas, et ça marchais pas mieux, alors je me suis dit que c'était
peut-être ça. Mais maintenant je fait sans le modifier (et ça change rien).
Erwan Arzur wrote:

Je renomme donc chaque pair de fichiers en trois temps.
Au début, je ne faisais pas de réaffectation du nouveau fichier dans
le tableau, j'ai essayé comme cela pour voir si c'était mieux, mais non.
Je me retrouve avec un fichier5temp, plus de fichier1 et toujours le
fichier5 de départ.
Je ne comprend pas mon erreur. Si quelqu'un peut m'éclairer ou à une
autre idée, je suis tout ouïe.



comme tu modifies tabFiles pendant ton traitement, ça doit se mélanger
très fort les pinceaux, surtout, quand dans un tableau avec un nombre
impair de postes, le début et la fin se rejoignent ...


Ca c'est pas grave, puisque je ne parcours le tableau que sur sa moitié.
Normalement ça marche bien au niveau du parcours. C'est vraiment le renameTo
qui ne marche pas, et je ne vois pas pourquoi.

Moi j'aurais fait une copie du tableau d'origine trié dans le nouveau
sens (avec les Collections, c'est très facile) et j'aurai parcouru les
deux tableaux en même temps en faisant des rename ... inconvénient : ça
prend plus de place en mémoire ...