galera a duvida eh a seguinte, capturo o nome dos arquivos dentro de um diretorio, logo apos tenho q passar esse nomes ao meu metodo para que eu possa ler os valores dentro dele, soh que surguiu o seguinte problema:
preciso substituir o "\" pelo "/" pois senao nao eh possivel fazer a leitura do arquivo soh que da erro
[code]
arquivo.replace("\", "/");
[\code]
tipow... ele pega com um caracter especial, tipow... como se eu fosse fazer um "\n" como faco para que isso nao ocorra, como fazer para que o meu \ seja tratado como um caracter qualquer?
kra nao deu certo preciso substituir o \ por uma / assim… e nao \ coloquei assim soh pra testar e nao deu certo…
tipow… nao substitui nda, pq nao tem \ nas strings que eh retornada o que tem eh \ e o java o considera como caracter especial como havia dito antes
alguem ai jah passou por isso e conseguiu resolver?
kaique
Cara, como o caractere ‘’ é especial no Java, para você conseguir encontrá-lo em alguma String você precisa escrever assim ‘\’. É o mesmo caso de quando você vai abrir um arquivo. Existem 2 formas de fazer:
Assim:
eh soh vcs digitarem ai no em um codigo de vcs que vcs vao ver o que da…
ninguem sabe me responder?
T
thingol
Siga o que o glauber_rochab escreveu, é exatamente desse jeito que tem de ser.
Dá o resultado que você quer.
G
gzofera
nao poh o glauber substitui o / por \ quero substituir o \ por /
tipow… jah tentei assim
String str = “c:\teste\pasta”;
str = str.replace("\","/"); soh que nao da certo, quero substituir o \ por / para jogar a string em um um arquivo do tipo File
alguem mais?
Fox_McCloud
Se a sua intenção é converter a navegação de um sistema de arquivos para o outro, é muito mais fácil utilizar o File.pathSeparatorChar do que ficar convertendo \ e /…
Usando File.separatorChar, o código é automaticamente universal, pois a JVM vai automaticamente colocar o separador adequado para o sistema operacional onde está rodando.
Fox_McCloud
Observação… é claro que o conceito de raiz no [b]C:[/b] é típico de Windows, no Linux a raiz é apenas /, então lembre-se de pensar também no problema da raiz.
E, claro, adapte o exemplo que eu passei para um diretório que exista na sua máquina…
G
gzofera
ok amigo assim me rotorna o nome dos arquivos certinho, mais preciso do caminho dos arquivos tipow… d:/pasta/arquivo
mais de toda forma vlws, seu metodo pode me ajudar mto, vc conhece um jeito de mostrar o caminho completo?
outra duvida
tipow…
preciso manipular os arquivos… tipow… os arquivos que tem o final TR preciso jogar eles em uma outra pasta, sabe como fazer isso?
vlws
Fox_McCloud
A aproximação mais comum para trabalhar com a árvore de diretórios é a recursividade. A cada novo subdiretório encontrado a sua árvore é atualizada através do chamamento recursivo do mesmo método (que me parece que é justamente o que você está tentando fazer).
O melhor jeito de filtrar Strings é através do uso de expressões regulares, eu sugiro que você dê uma pesquisada no assunto.
Aguarde apenas um momento que eu estou desenvolvendo um código pra te dar um exemplo de como utilizar essas coisas…
G
gzofera
a funcao eu passei acima eh recursiva… soh q tipow…
os resultados sao retornados assim
c:\teste\arquivo.txt
e eu preciso que me retorne assim
c:/teste/arquivo.txt
tem como fazer isso?
Fox_McCloud
Examine o main e entenda o que será listado. Depois, escolha um diretório pequeno no seu C: para testar esse código, assim fica mais fácil acompanhar o que aconteceu.
Teste e depois comenta, vê se restaram dúvidas e tal...
:wink:
importjava.io.File;importjava.io.IOException;importjava.util.regex.Matcher;importjava.util.regex.Pattern;publicclassRecursiveJavaDir{privateStringroot;privatePatternpattern;publicRecursiveJavaDir(Stringroot,Stringdir,Stringextension)throwsException{this.root=root;listDirs(dir,extension);}/** * Esse método manda listar o diretório com o nome * fornecido na raiz do sistema, e o método utilizado * vai procurar por arquivos terminados com a extensão * especificada */privatevoidlistDirs(StringdirName,Stringextension)throwsException{Filedir=newFile(root+File.separatorChar+dirName);if(!dir.exists()){thrownewException("Diretório não encontrado na raiz do sistema");}// Não há necessidade de else. Se não houver exceção o restante do método é executado.// Aqui é criada uma expressão regular, que significa: toda String terminada pela extensãopattern=Pattern.compile(extension+"$");recursivelyListDir(dir,0);}/** * Lista o diretório fornecido recursivamente procurando por arquivos com a extensão definida * Espaços são adicionados à esquerda dos subdiretórios para facilitar a visualização... */privatevoidrecursivelyListDir(Filedir,intnumberOfSpaces)throwsIOException{printSpaces(numberOfSpaces);// Aqui a substituição que você quer ver...System.out.println("dir: "+dir.getCanonicalPath().replace("\", "/")); // Verificando os ARQUIVOS deste diretório for(File file : dir.listFiles()){ if (file.isFile()){ Matcher matcher = pattern.matcher(file.getName()); // Se o nome do arquivo bater com o padrão estabelecido, o nome é impresso no console... if(matcher.find()){ printSpaces(numberOfSpaces); System.out.println("filefound:"+file.getName()); } } } // Verificando os SUB-DIRETÓRIOS desse diretório for(File file : dir.listFiles()){ // Aqui ocorre a chamada recursiva para listar os sub-diretórios if(file.isDirectory()){ recursivelyListDir(file, numberOfSpaces+1); } } } /** * Imprime o número de espaços fornecido */ private void printSpaces(int numberOfSpaces){ for(int i=0; i<numberOfSpaces; i++){ System.out.print("|"); } } public static void main(String[] args){ try{ new RecursiveJavaDir("C:", "cld", "txt"); } catch(Exception e){ e.printStackTrace(); } }}