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());
}
}
[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?
[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());
}
}
}
}
}
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:
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