Comment trier les noms de fichiers par ordre croissant?
J'ai un ensemble de fichiers dans un dossier et de tous, en commençant avec un nom similaire, sauf un. Voici un exemple:
Coordinate.txt
Spectrum_1.txt
Spectrum_2.txt
Spectrum_3.txt
.
.
.
Spectrum_11235
Je suis capable de lister tous les fichiers dans le dossier spécifié, mais la liste n'est pas dans un ordre croissant du spectre de nombre. Exemple: j'obtiens le résultat suivant lorsque le programme est exécuté:
Spectrum_999.txt
Spectrum_9990.txt
Spectrum_9991.txt
Spectrum_9992.txt
Spectrum_9993.txt
Spectrum_9994.txt
Spectrum_9995.txt
Spectrum_9996.txt
Spectrum_9997.txt
Spectrum_9998.txt
Spectrum_9999.txt
Mais cette commande n'est pas correcte. Il devrait y être Spectrum_1000.txt fichier après Spectrum_999.txt. Quelqu'un peut-il aider? Voici le code:
import java.io.*;
import java.util.Arrays;
import java.util.Comparator;
import java.util.Scanner;
public class FileInput {
public void userInput()
{
Scanner scanner = new Scanner( System.in );
System.out.println("Enter the file path: ");
String dirPath = scanner.nextLine(); //Takes the directory path as the user input
File folder = new File(dirPath);
if(folder.isDirectory())
{
File[] fileList = folder.listFiles();
Arrays.sort(fileList);
System.out.println("\nTotal number of items present in the directory: " + fileList.length );
//Lists only files since we have applied file filter
for(File file:fileList)
{
System.out.println(file.getName());
}
//Creating a filter to return only files.
FileFilter fileFilter = new FileFilter()
{
@Override
public boolean accept(File file) {
return !file.isDirectory();
}
};
fileList = folder.listFiles(fileFilter);
//Sort files by name
Arrays.sort(fileList, new Comparator()
{
@Override
public int compare(Object f1, Object f2) {
return ((File) f1).getName().compareTo(((File) f2).getName());
}
});
//Prints the files in file name ascending order
for(File file:fileList)
{
System.out.println(file.getName());
}
}
}
}
source d'informationauteur novicegeek
Vous devez vous connecter pour publier un commentaire.
Ce que vous demandez est numérique tri. Vous avez besoin de mettre en œuvre un Comparateur et le passer à la Les tableaux#tri méthode. Dans la méthode de comparaison vous avez besoin d'extraire le nombre de chaque nom de fichier, puis de comparer les chiffres.
La raison pour laquelle vous obtenez le résultat que vous obtenez est maintenant que le tri se passe par ordre alphanumérique
Ici est d'une manière très simple de le faire. Ce code utilise de simples
String
-opération pour extraire les numéros. Cela fonctionne si vous connaissez le format du nom de fichier, dans votre casSpectrum_<number>.txt
. Une meilleure façon de faire de l'extraction consiste à utiliser expression régulière.Sortie
La actuellement accepté de répondre à ne présente que pour les suffixes des fichiers qui sont toujours appelés du même nom (c'est à dire en ignorant le préfixe).
Beaucoup plus générique solution, j'ai blogué sur icifonctionne avec n'importe quel nom de fichier, le fractionnement de noms dans les segments et d'ordonner les segments numériquement (si les deux segments sont des nombres) ou de manière lexicographique, autrement. Idée inspirée de cette réponse:
Cela peut aussi gérer version avec de subversions, par exemple, des choses comme
version-1.2.3.txt
Vous pouvez trouver de solution à votre problème dans le commentaire ci-dessus, mais en prenant en considération le fait que seul lien a été publié, je suis en train de donner le code à partir de ce site. A très bien fonctionné.
Vous avez besoin pour créer votre propre AlphanumericalComparator.
2. Trier vos fichiers en fonction de cette classe.
Espère que cela aide. Il a travaillé pour moi, comme un charme.
Solution de: http://www.davekoelle.com/files/AlphanumComparator.java ici
assurez-vous de manipuler les fichiers qui n'a pas de _ dans le nom
La
NameFileComparator
classe disponibles sur Commons IO bibliothèque de fonction de tri de tableau de fichier par nom,par date de dernière modification, la taille et beaucoup plus.Les fichiers peuvent être triés dans l'ordre croissant et l'ordre décroissant, la sensibilité à la casse ou sur des cas d'insensibilité.D'importation :
org.apache.commons.io.comparator.NameFileComparator
Code :
Suffit d'utiliser:
Pour L'Ascension: Les Collections.de tri(Liste)
Pour La Descente : Les Collections.de tri(Liste des Collections.reverseOrder())
vous pouvez utiliser
Collections.sort(fileList);
pour trier la liste de tableaux.Ensuite utiliser
Collections.sort()
Juste une autre façon de le faire, mais en utilisant la puissance de java8