Caminho da Aplicação

Pessoal,

Tenho uma classe que preciso passar um arquivo para ela…

Este arquivo está dentro do diretorio da própria aplicação, exemplo:

C:\java_apps\Projeto1\Arquivo.xml

Preciso passar esse path para um método…
tem algum maneira de passar por exemplo ao invés do path completo,
algo do tipo

   ClasseX obj = new ClasseX(ApplicationPath + "Arquivo.xml");

Existe alguma maneira??

Abraço a Todos…

Mateus

Eh web? Se for, voce pode o usar o getRealPath(nomeDoArquivo) do servletContext. Ele vai te dah o caminho certinho ateh o arquivo.

Poxa esqueci de dizer… naum é web…

outra coisa…
sempre o Eclipse reclama do Path por exemplo C:\teste\arquivo.xml
Qual caracter coloco na frente da string para evitar isso?

no C# faço C:\asdad\adasd.xml ou @C:\asdasd\adasd.xml (naum queria usar duas barras);

Obrigado,

Mateus

Veja: public String getAbsolutePath(). Class File

Exemplo:

import java.io.*;

class Test {

	public static void main(String[] args) {
		File f = new File("Test.java");
		String s = f.getAbsolutePath();

		System.out.println(s); // aqui imprime G:\java\Test.java

		File f2 = new File(s);
		System.out.println(f2.getAbsolutePath());

		// posso passar o path dessa forma
		File f3 = new File("g:/java/Test.java");
		System.out.println(f3.getAbsolutePath());
	}
}

Fala Matheus, tudo bem?

Na verdade o que eu preciso é o caminho da APLICAÇÃO para depois concatenar com algum arquivo e não o caminho absoluto de um arquivo.

Abraço,

Mateus

[quote=mateus_dias]…
Tenho uma classe que preciso passar um arquivo para ela…
Este arquivo está dentro do diretorio da própria aplicação
…[/quote]
E o que você chama de aplicação? Você não está confundindo isso aqui com C# não? :smiley:

[quote=mateus_dias]…
Exemplo:

C:\java_apps\Projeto1\Arquivo.xml

Preciso passar esse path para um método…
tem algum maneira de passar por exemplo ao invés do path completo,
algo do tipo

   ClasseX obj = new ClasseX(ApplicationPath + "Arquivo.xml");

[/quote]
Não existe necessidade desse “ApplicationPath”. Se o “Arquivo.xml” está no mesmo diretório da classe, basta usar:

ClasseX obj = new ClasseX(new File("Arquivo.xml"));

Pra ficar um pouco mais “claro” (ou não…), veja o exemplo abaixo:

import java.io.*;

class Test {

	public static void main(String[] args) {
		Test t = new Test();

		// passa para o metodo o arquivo Test.java
		// que está no mesmo diretorio da "aplicacao"
		t.printAbsolutePath(new File("Test.java"));

		// caso precise passar o path completo de um arquivo
		t.printAbsolutePath(new File("c:/windows/win.ini"));

		// passa para o metodo o diretorio da "aplicacao"
		t.printFiles(new File(System.getProperty("user.dir")));
		// acho que e isso que voce estava querendo, certo?
		// mas como voce pode ver, para resolver seu problema
		// basta usar SeuObjeto obj = new SeuObjeto(new File("Arquivo.xml"));

		t.printFiles(new File("Test.java")); // nao sera impresso
	}

	void printAbsolutePath(File f) {
		// imprime o path absoluto e verifica se o arquivo existe
		System.out.println(f.getAbsolutePath() + ", " + f.exists());
	}

	void printFiles(File f) {

		if (f.isDirectory()) { // verifica se f e um diretorio

			// lista os arquivos do diretorio
			File[] files = f.listFiles();

			for (File file : files) {
				// verifica se file nao e um diretorio
				if (!file.isDirectory()) {
					// imprime o path absoluto
					System.out.println(file.getAbsolutePath());
				}
			}
		}
	}
}

Espero ter ajudado… :roll:

E como que eu faço qdo o arquivo não está na raiz da aplicação e sim em um sub diretório ??

ex: C:/aplicacoes_java/projeto/anexo/arquivo.jpg ???

Obrigado galera.

Só para esclarecer: primeiro temos que entender que o caminho a onde esta a aplicação (.jar da aplicação e demais arquivos que a aplicação possa usar) e o caminho a onde esta sendo executada a aplicação são coisas\caminhos diferentes.
Para pegar o caminho a onde a aplicação esta sendo executada é facil. Basta usar os exemplos com File, como já demosntrados nesse tópico, ou pegar a propriedade “user.dir”:

String caminho = System.getProperty("user.dir");

Já para pegar o caminho dos arquivos da aplicação (.jar, .class, .java e etc.) é um pouco mais xarope, mas aqui eu tenho um exemplo que usei em uma de minhas aplicações:

CharSequence space = "%20", replace = " ";

String path = ClassLoader.getSystemResource("").getPath().replace(space, replace);

Nesse caso, eu faço um replace por " " (espaço) dos caracteres “%20” porque sempre que aparece na String retornada pelo método getPath() a seguência “%20”, isso representa espaço em branco na hierarquia de diretórios (Windows).
Exemplo:
Diretório Original: C:\Arquivos de Programas\Java
Diretório Retornado pelo getPath: C:\Arquivos%20de%20Programas\Java

É isso ai, espero ter ajudado =)
Abraço o/