Déplacement de fichiers d'un répertoire à un autre, à l'aide de Java

J'ai des problèmes avec le déplacement de fichiers dans les répertoires en Java. Le problème est que je ne comprends pas pourquoi le programme se comporte de la façon dont il se comporte. Ci-dessous est une (légère) de la modification de mon programme.

Je parcourir les répertoires d'un répertoire. Dans chacun de ces répertoires parcourus
il y a des fichiers de texte, qui je veux déplacer en deux sous-répertoires de la traversée de répertoire. J'ai créer ces deux répertoires (trainingData et testData). Je veux 30 des fichiers à être déplacé dans la testData répertoire et 60 dans le trainingData répertoire. Pour ce faire, je fais deux boucles for.

Dans le code ci-dessous, j'ai mis d'abord la boucle de déplacer les fichiers dans trainingData. Et la bonne nouvelle, c'est que tous ces 60 fichiers sont vraiment déplacés dans trainingData. Cependant, la deuxième boucle ne semble pas faire quoi que ce soit - pas de fichier de l'un quelconque de ces 30 fichiers restants est déplacé. Ces 30 fichiers de continuer à rester dans l'original (traversé) répertoire.

De plus, quelque chose de très étrange, c'est que quand je change les deux boucles de mettre celui de déplacer le 30 fichiers sur la première place, et l'autre après celui-ci, le 30 dossiers sont correctement déplacé dans testData, cependant, 30 des 60 autres, les fichiers sont déplacés vers le trainingData répertoire et le reste 30 fichiers de rester dans l'original (traversé) répertoire.

Le programme ne fonctionne toujours pas faire ce que je veux (en partie seulement), cependant, ce qui me dérange, c'est que je ne comprends pas pourquoi cette différence est-elle(??) quand je change les lieux des deux boucles. Le code est identique, et devrait fonctionner de la même, n'est-ce pas?

Merci pour le temps de regarder dans le code, et si nécessaire, je suis prêt à fournir plus de code et les explications.

File[] reviews = null;
for(File sortedRevDir : sortedRevDirs) {
     reviews = sortedRevDir.listFiles();
     int numFiles = 90;
     int numTwoThirds = 60;
     int numOneThirds = numFiles - numTwoThirds;     

     String trainingDir = sortedRevDir.getAbsolutePath() + "/trainingData";
     File trDir = new File(trainingDir);
     trDir.mkdir();
     String testDir = sortedRevDir.getAbsolutePath() + "/testData";
     File tsDir = new File(testDir);
     tsDir.mkdir();

     for(int i = 0; i < numTwoThirds; i++) {
         File review = reviews[i];
         if(!review.isDirectory()) {
              File reviewCopied = new File(trDir + "/" + review.getName());
              review.renameTo(reviewCopied);
         } 
     }
     for(int j = 0; j < numOneThird; j++) {
         File review = reviews[j];
         if(!review.isDirectory()) {
          File reviewCopied = new File(tsDir + "/" + review.getName());
          review.renameTo(reviewCopied);
         }
     }
 }
  • Un style rapide suggestion: "numFiles" serait mieux comme quelque chose comme "fileQuantity". Comme il est, il pourrait être une liste de fichiers contenant des nombres, une liste de numéros associés à des fichiers, ou de quelque chose et je ne sais pas, sans regarder à la déclaration. numOneThird serait plus simple que juste numFiles / 3 et numTwoThirds serait plus simple que numFiles * 2 / 3. Tout ce que vous avez faire est de remplacer un rapport mathématique avec la même mention dans les mots. Idéalement, le nom de la variable doit donner une indication quant à POURQUOI vous êtes divisant 90 en groupes.
  • Merci, je vais le prendre à l'esprit.
InformationsquelleAutor user42155 | 2009-07-18