J'ai le code ci-dessous:
class ListPageXMLFiles implements FileFilter {
@Override
public boolean accept(File pathname) {
DebugLog.i("ListPageXMLFiles", "pathname is " + pathname);
String regex = ".*page_\\d{2}\\.xml";
if(pathname.getAbsolutePath().matches(regex)) {
return true;
}
return false;
}
}
public void loadPageTrees(String xml_dir_path) {
ListPageXMLFiles filter_xml_files = new ListPageXMLFiles();
File XMLDirectory = new File(xml_dir_path);
for(File _xml_file : XMLDirectory.listFiles(filter_xml_files)) {
loadPageTree(_xml_file);
}
}
FileFilter
fonctionne bien, mais listFiles()
semble lister les fichiers par ordre alphabétique inverse. Existe-t-il un moyen rapide de dire à listFile()
de répertorier les fichiers par ordre alphabétique?
La méthode listFiles
, avec ou sans filtre, ne garantit aucun ordre.
Cependant, il retourne un tableau que vous pouvez trier avec Arrays.sort()
.
File[] files = XMLDirectory.listFiles(filter_xml_files);
Arrays.sort(files);
for(File _xml_file : files) {
...
}
Cela fonctionne car File
est une classe comparable qui, par défaut, trie les noms de chemin lexicographiquement. Si vous souhaitez les trier différemment, vous pouvez définir votre propre comparateur.
Si vous préférez utiliser Streams:
Une approche plus moderne est la suivante. Pour imprimer les noms de tous les fichiers d’un répertoire donné, par ordre alphabétique, procédez comme suit:
Files.list(Paths.get(dirName)).sorted().forEach(System.out::println)
Remplace le System.out::println
avec tout ce que vous voulez faire avec les noms de fichiers. Si vous voulez seulement les noms de fichiers qui finissent par "xml"
faites juste:
Files.list(Paths.get(dirName))
.filter(s -> s.toString().endsWith(".xml"))
.sorted()
.forEach(System.out::println)
Encore une fois, remplacez l'impression par l'opération de traitement de votre choix.
Je pense que la réponse précédente est la meilleure façon de le faire ici est un autre moyen simple. juste pour imprimer les résultats triés.
String path="/tmp";
String[] dirListing = null;
File dir = new File(path);
dirListing = dir.list();
Arrays.sort(dirListing);
System.out.println(Arrays.deepToString(dirListing));
Dans Java 8:
Arrays.sort(files, (a, b) -> a.getName().compareTo(b.getName()));
Ordre inverse:
Arrays.sort(files, (a, b) -> -a.getName().compareTo(b.getName()));
Ceci est mon code:
try {
String folderPath = "../" + filePath.trim() + "/";
logger.info("Path: " + folderPath);
File folder = new File(folderPath);
File[] listOfFiles = folder.listFiles();
int length = listOfFiles.length;
logger.info("So luong files: " + length);
ArrayList<CdrFileBO> lstFile = new ArrayList< CdrFileBO>();
if (listOfFiles != null && length > 0) {
int count = 0;
for (int i = 0; i < length; i++) {
if (listOfFiles[i].isFile()) {
lstFile.add(new CdrFileBO(listOfFiles[i]));
}
}
Collections.sort(lstFile);
for (CdrFileBO bo : lstFile) {
//String newName = START_NAME + "_" + getSeq(SEQ_START) + "_" + DateSTR + ".s";
String newName = START_NAME + DateSTR + getSeq(SEQ_START) + ".DAT";
SEQ_START = SEQ_START + 1;
bo.getFile().renameTo(new File(folderPath + newName));
logger.info("newName: " + newName);
logger.info("Next file: " + getSeq(SEQ_START));
}
}
} catch (Exception ex) {
logger.error(ex);
ex.printStackTrace();
}