Problema com string

16 respostas
G

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?

vlws

16 Respostas

kaique

Tenta fazer assim:

arquivo.replace("\", "/");

[]'s.

G

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:

File file = new File("C:\teste.txt");

Ou assim:

File file = new File("C:/teste.txt");

Dá uma lida nesse link:
http://home.cogeco.ca/~ve3ll/jatutor2.htm
Acho que você deve estar fazendo confusão com algo no seu código…dá uma revisada…

[]'s.

A

Posta aí o seu código fonte. Fica mais fácil de te ajudar.

glauber_rochab

Dê uma olhada nisso:

String str = "c:/teste/pasta";
		str = str.replace("/","\");
		System.out.println(str);

Flw

G

kra eu quero trocar o \ pelo / e nao o / por \

eh soh vcs digitarem ai no em um codigo de vcs que vcs vao ver o que da…

ninguem sabe me responder?

T

Siga o que o glauber_rochab escreveu, é exatamente desse jeito que tem de ser.

Dá o resultado que você quer.

G

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 /…

G

vou postar o codigo

public static void addRecursive(List files, File dir, Pattern pat) {  
exit: {  
if (dir == null || !dir.isDirectory()) {  
break exit;  
}  
File[] entries = dir.listFiles();  
// pode ser que retorne null, porque não  permissão de leitura  
if (entries == null) {  
break exit;  
}  
for (int i = 0; i < entries.length; ++i) {  
File entry = entries[i];  
if (entry.isDirectory()  
&& !(".".equals(entry.getName())  
|| "..".equals(entry.getName()))) {  
addRecursive(files, entry, pat);  
} else {  
if (pat.matcher(entry.getName()).matches()) {  
files.add(entry);  
}  
}  
}  
}  
}

esse eh o metodo que me retorna o nome de todos os arquivos… e eu o chamo assim

List files = new ArrayList();  
     File dir = new File ("D:/testa");  
     Pattern pat = Pattern.compile (".*\.txt", Pattern.CASE_INSENSITIVE);  
     migra.addRecursive(files, dir, pat);

for (int i = 0; i < files.size(); i++){
JOptionPane.showMessageDialog(null, files.get(i));

    }

como utilizar o File.pathSeparatorChar?

vlws

Fox_McCloud

Perdoe a gafe, File.pathSeparatorChar é para separar variável de ambiente path. Para separar caminho de diretório usa-se File.separatorChar.

Experimente o código abaixo, onde eu quero listar o conteúdo de C:\bea:

import java.io.File;

public class Teste {
	public Teste(){
		File path = new File("C:"+File.separatorChar+"bea");
		for(File file : path.listFiles()){
			System.out.println(file.getName());
		}
	}
	
	public static void main(String[] args){
		new Teste();
	}	
}
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

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

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:

import java.io.File;
import java.io.IOException;
import java.util.regex.Matcher;
import java.util.regex.Pattern;



public class RecursiveJavaDir {

	private String root;
	private Pattern pattern;
	
	public RecursiveJavaDir(String root, String dir, String extension) throws Exception {
		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
	 */
	private void listDirs(String dirName, String extension) throws Exception {
		File dir = new File(root+File.separatorChar+dirName);
		if(!dir.exists()){
			throw new Exception("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ão
		pattern = 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...
	 */
	private void recursivelyListDir(File dir, int numberOfSpaces) throws IOException {
		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("file found: "+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();
		}
	}
	
}
>
Criado 19 de fevereiro de 2008
Ultima resposta 19 de fev. de 2008
Respostas 16
Participantes 6