Bom dia a todos!
PSVTEC, esse problema é clássico e também de fácil compreensão, vi que está ciente do porque a ordenação não funciona da maneira esperada, pois você está priorizando os números que na verdade são textos (String), dessa forma os números são apenas textos que não tem significado número, por isso não é possível efetuar cálculos, e nada que seja um comportamento numérico sem fazer uma conversão!
Você disse que estes nome são nomes de arquivos, correto?!
Estes arquivos são criados por você ou já é um legado ou você pode alterar o padrão sem interferir no projeto…
Eu já vi muito isso e de tudo que vi e fiz há duas soluções mais sensatas, a primeira delas e usar convenção, por exemplo:
00000001TextoQualquer
00000002TextoQualqueasdfasdfdas
00000003TextoQualqueroddffdfd
00000004TextoQualquerofasdfasdf
Lembre-se que os Zeros são apenas para adequar a convenção a prática, dessa forma os números serão reconhecidos e ordenados corretamente! Porque na String no momento da ordenação é verificada uma letra de cada vez, por isso o 2 vem antes do 20 e não antes do 3.
E outra solução é você criar outro método para :
Usar o número capturado do nome do arquivo para ser o index/flag da lista (Dictionary por exemplo) para alocar a posição do item na lista, exemplo:
Você pega o número do nome do arquivo e adiciona no INDEX referente ao número que está no nome do arquivo!
Assim terá uma lista na ordem correta…
Sei que não ficou muito claro, mas primeiro veja se a convenção é melhor opção…
Caso opte pela escrita de um método e tenha dúvidas, ajudaremos você na elaboração do mesmo…
Obs: Eu não conheço algum método da API Java que faça essa ordenação, por isso essas são minhas alternativas.
Abraços…