Ordenar nomes de arquivos que contem numero no final?
8 respostas
quil
Olá pessoal a minha dúvida é a seguinte:
Eu tenho uma pasta cheia de arquivos e o nome deles estão no seguinte formato.:
Msg_0
Msg_1
Msg_2
Msg_3
Msg_4
Msg_5
Msg_6
Msg_7
Msg_8
Msg_9
Msg_10
…E ainda tem mais de 200 arquivos desse tipo seguindo a mesma ordem Msg_(numero)…
O meu problema esta em pegar o nome desses arquivo em ordem ou seja pegar o arquivo Msg_0 depois o Msg_1
e depois Msg_2 e assim por diante.
Mas isso não acontece, porque o programa esta lendo os arquivos em uma ordem de primeira vista parece estranho mas se reparar bem para o programa essa é a ordem certa, aqui o que eu estou falando:
Msg_0
Msg_1
Msg_10
Msg_100
Msg_101
Msg_102
Msg_103
Msg_104
Msg_105
Msg_106
Msg_107
Msg_108
Msg_109
Msg_11
Msg_110
Msg_111
Msg_112
Msg_113
Msg_114
Msg_115
Msg_116
Msg_117
Msg_118
Msg_119
Msg_12
Msg_120
… É dessa forma que o programa esta ordenando os arquivo…
Aqui esta a parte do código que eu estou usando:
importjava.io.File;importjava.util.Arrays;publicclassFooClasse{String[]children;FilelistArquivo;publicvoidlerArquivo(){listArquivo=newFile("pasta_Msg");children=listArquivo.list();Arrays.sort(children);System.out.println(Arrays.toString(children));}//Fim do metodo lerArquivo()}//Fim da classe FooClasse
Alguém conhece alguma outra forma para poder ordenar esses arquivos?
Basta vc pegar esse exemplo que fiz… e adaptar ao seu modo…
publicstaticvoidmain(String[]args){Map<Integer,String>mapArq=newHashMap<>();List<Integer>numOrdenado=newArrayList<>();//Sua lista de Arquivos dentro da Pasta por exemploString[]myArray={"Msg_102","Msg_1","Msg_10","Msg_9","Msg_101","Msg_11","Msg_0","Msg_3","Msg_234","Msg_115","Msg_20"};for(inti=0;i<myArray.length;i++){Stringn=myArray[i].substring(4,myArray[i].length());//Pega o valor numericomapArq.put(Integer.parseInt(n),myArray[i]);//Chave e ValornumOrdenado.add(Integer.parseInt(n));}Collections.sort(numOrdenado);for(Integerord:numOrdenado){if(mapArq.containsKey(ord)){System.out.println(mapArq.get(ord));//Aqui pega seus Arquivos Ordenados}}}
Uma Solução bem mais Simples jweibe.. Essa solução também me mostrou outros pontos de vistas.. Obrigado !!!
JavaDreams
andy11x:
Basta vc pegar esse exemplo que fiz.. e adaptar ao seu modo....
publicstaticvoidmain(String[]args){Map<Integer,String>mapArq=newHashMap<>();List<Integer>numOrdenado=newArrayList<>();//Sua lista de Arquivos dentro da Pasta por exemploString[]myArray={"Msg_102","Msg_1","Msg_10","Msg_9","Msg_101","Msg_11","Msg_0","Msg_3","Msg_234","Msg_115","Msg_20"};for(inti=0;i<myArray.length;i++){Stringn=myArray[i].substring(4,myArray[i].length());//Pega o valor numericomapArq.put(Integer.parseInt(n),myArray[i]);//Chave e ValornumOrdenado.add(Integer.parseInt(n));}Collections.sort(numOrdenado);for(Integerord:numOrdenado){if(mapArq.containsKey(ord)){System.out.println(mapArq.get(ord));//Aqui pega seus Arquivos Ordenados}}}