Quero acessar meu diretório de trabalho atual usando java.
Meu código:
String current = new java.io.File( "." ).getCanonicalPath();
System.out.println("Current dir:"+current);
String currentDir = System.getProperty("user.dir");
System.out.println("Current dir using System:" +currentDir);
Resultado:
Current dir: C:\WINDOWS\system32
Current dir using System: C:\WINDOWS\system32
Minha saída não está correta porque a unidade C não é meu diretório atual.
Como obter o diretório atual?
cd
comando no prompt de comando ao executar isso?Respostas:
Isso imprimirá um caminho absoluto completo de onde seu aplicativo foi inicializado.
A partir da documentação :
java.io
pacote resolve nomes de caminho relativos usando o diretório de usuário atual. O diretório atual é representado como propriedade do sistema, ou seja,user.dir
e é o diretório de onde a JVM foi chamada.fonte
Consulte: http://docs.oracle.com/javase/tutorial/essential/io/pathOps.html
Usando
java.nio.file.Path
ejava.nio.file.Paths
, você pode fazer o seguinte para mostrar o que Java acha que é o seu caminho atual. Isso para 7 em diante e usa o NIO.Isso
Current relative path is: /Users/george/NetBeansProjects/Tutorials
mostra que, no meu caso, é de onde eu executei a classe. Construir caminhos de maneira relativa, ao não usar um separador à esquerda para indicar que você está construindo um caminho absoluto, usará esse caminho relativo como ponto de partida.fonte
Paths.get("").getParent()
:, ele fornecenull
. Em vez isso funciona:Paths.get("").toAbsolutePath().getParent()
.O seguinte funciona no Java 7 e superior (veja aqui para documentação).
fonte
import java.io.File; File(".").getAbsolutePath()
?Paths.get()
pode ser considerado melhor, pois fornece acesso direto àPath
interface mais poderosa ..normalize()
neste contexto?Returns a path that is this path with redundant name elements eliminated.
Isso fornecerá o caminho do seu diretório de trabalho atual:
E isso lhe dará o caminho para um arquivo chamado "Foo.txt" no diretório de trabalho:
Edit: Para obter um caminho absoluto do diretório atual:
* Atualização * Para obter o diretório de trabalho atual:
fonte
Path path = FileSystems.getDefault().getPath(".").toAbsolutePath();
Path
objeto apontando para um arquivo chamado.
dentro do diretório de trabalho atual. Usando uma string vazia, em vez de"."
funcionar para mim.Esta é a solução para mim
fonte
new File("").getAbsoluteFile()
vez disso./
ao criar um caminho relativo. Eu estava errado, não comece/
.../
também funciona para subir na árvore de diretórios..
.Encontrei esta solução nos comentários, melhor do que outros e mais portátil:
Ou até
fonte
O que faz você pensar que c: \ windows \ system32 não é seu diretório atual? A
user.dir
propriedade deve ser explicitamente "Diretório de trabalho atual do usuário".Em outras palavras, a menos que você inicie o Java na linha de comando, c: \ windows \ system32 provavelmente é o seu CWD. Ou seja, se você clicar duas vezes para iniciar o programa, é improvável que o CWD seja o diretório em que você está clicando duas vezes.
Editar : parece que isso só é verdade para janelas antigas e / ou versões Java.
fonte
user.dir
é sempre a pasta em que cliquei duas vezes no arquivo jar.Use
CodeSource#getLocation()
.Isso funciona bem em arquivos JAR também. Você pode obter
CodeSource
porProtectionDomain#getCodeSource()
e, porProtectionDomain
sua vez, pode ser obtido porClass#getProtectionDomain()
.fonte
fonte
""
se o aplicativo estiver sendo executado a partir de um arquivo JAR ou um elemento CLASSPATH. Não foi o que foi pedido.getClass()
é um método de objeto, portanto, em um contexto estático, apenas remover othis
não funciona. Você teria que se referir explicitamente à classe em que está participandoMyClass.class.getClassLoader().....
.geralmente, como um objeto File:
você pode querer ter uma sequência completa qualificada como "D: / a / b / c", fazendo:
fonte
Estou no Linux e obtenho o mesmo resultado para ambas as abordagens:
Paths.get("")
docsSystem.getProperty("user.dir")
docsfonte
No Linux, quando você executa um arquivo jar no terminal , ambos retornam o mesmo
String
: "/ home / CurrentUser" , não importa onde esteja o arquivo jar. Depende apenas do diretório atual que você está usando com o seu terminal, quando inicia o arquivo jar.Se o seu
Class
commain
seria chamadoMainClass
, então tente:Isso retornará um
String
com caminho absoluto do arquivo jar .fonte
O uso do Windows user.dir retorna o diretório conforme o esperado, mas NÃO quando você inicia o aplicativo com direitos elevados (executado como admin); nesse caso, você obtém C: \ WINDOWS \ system32
fonte
Espero que você queira acessar o diretório atual, incluindo o pacote, ou seja, se o seu programa Java estiver presente
c:\myApp\com\foo\src\service\MyTest.java
e você desejar imprimir atéc:\myApp\com\foo\src\service
então, tente o seguinte código:Nota: Este código é testado apenas no Windows com Oracle JRE.
fonte
File.separator
vez disso, ou umFile
construtor de vários argumentos ); 3. o caminho da classe é especificado na linha de comando e o 'diretório atual incluindo o pacote' (??) é: a. especificado primeiro, b. especificado absolutamente, c. corresponde exatamente ao CWD (mesmo com a distinção entre maiúsculas e minúsculas do Windows) e d. é um descendente do CWDMencione que ele está marcado apenas
Windows
mas acho que funciona perfeitamente em outros sistemas operacionais [Linux,MacOs,Solaris
] :).Eu tinha 2
.jar
arquivos no mesmo diretório. Eu queria que um.jar
arquivo iniciasse o outro.jar
arquivo que está no mesmo diretório.O problema é que, quando você o inicia
cmd
no diretório atual, ésystem32
.;][[;'57f2g34g87-8+9-09!2#@!$%^^&()
ou()%&$%^@#
funciona bem.ProcessBuilder
com o seguinte, como a seguir:🍂 ..
🍂
getBasePathForClass(Class<?> classs)
:fonte
O diretório de trabalho atual é definido de maneira diferente em diferentes implementações Java. Para determinadas versões anteriores ao Java 7, não havia uma maneira consistente de obter o diretório de trabalho. Você pode contornar isso iniciando o arquivo Java
-D
e definindo uma variável para conter as informaçõesAlgo como
Isso não está certo, mas você entendeu. Então
System.getProperty("com.mycompany.workingDir")
...fonte
suponha que você esteja tentando executar seu projeto dentro do eclipse ou netbean ou independente da linha de comando. Eu escrevi um método para corrigi-lo
Para usar, em qualquer lugar que você deseja obter o caminho base para ler o arquivo, você pode passar sua classe âncora para o método acima, o resultado pode ser o que você precisa: D
melhor,
fonte
Nenhuma das respostas postadas aqui funcionou para mim. Aqui está o que funcionou:
Edit: A versão final no meu código:
fonte
Esta é a minha bala de prata sempre que surge o momento de confusão. (Chame como a primeira coisa em geral). Talvez, por exemplo, a JVM tenha sido desviada para uma versão diferente pelo IDE. Essa função estática pesquisa o PID do processo atual e abre o VisualVM nesse pid. A confusão acaba aí porque você quer tudo e consegue ...
fonte
System.getProperty("java.class.path")
fonte
este é o nome do diretório atual
este é o caminho do diretório atual
fonte