Criar pasta no mesmo diretório da aplicação

gostaria de saber como eu faço para criar uma pasta no mesmo diretório em que estão meus códigos .java porem isso tem que funcionar para qualquer computador.

EX:
C:\Users\Thiago\eclipse-workspace\Arquivos\src

C:\Users\Gustavo\Downloads\Arquivos\src

como faço para meu código funcionar nos 2 sendo que os nome e os diretórios são diferentes?

e como faço para que o código não sobreponha a pasta caso a mesma já esteja criada?

Ola, vc quer dentro do SRC? está ciente que isso só vai funcionar enquanto estiver testando com a IDE pq depois que compilar o JAR pra distribuir a pasta SRC deixa de existir.
Basicamente seria só new File(“src/pasta”).mkdir()

1 curtida

Pode ser meio escroto mencionar isso, mas eu passei um pouco de raiva esses dias no linux, e acredito que aconteça no Windows tbm… Se você executar seu programa via linha de comando e tiver um new File("pasta").mkdir(); a pasta vai ser criada onde foi disparada a execução e não na pasta do executável… tipo… se vc for lá no prompt e digitar cd c:/ no prompt você atualmente está em c:/ e vamos supor que seu programa está em c:/programa então se você executar seu programa assim java -jar c:/programa/programa.jar a pasta vai ser criada dentro do c:/… pra resolver esse problema eu tive que colocar meu programa no path, um horror de fazer cheio de colagens… Mas se seu executável tiver uma GUI que não será executada via linha de comando não tem esse problema… Tah mas qual objetivo desse bla bla bla? é que apesar de escroto inserir o caminho do seu programa no path sempre funfa =D

1 curtida

para retornar o diretorio do usuario atual ou o diretório atual, onde esta de fato o arquivo, use
o System.getproperty.

String userDir = System.getProperty("user.dir");
String userHome = System.getProperty("user.home");

user.dir = diretório onde sua classe está, excluindo as pastas referentes aos pacotes da sua classe,
se sua classe estiver em em C:\Programa\java\Classe.java, o seu user.dir será C:\Programa\java\,
E o user.home, no Windows, traz a pasta do usuário, em C:\Documents and Settings\usuario ,
desta forma pode criar subdiretorios na mesma pasta da aplicação,

1 curtida

ERRRADO.
System.getProperty(“user.dir”); vai retornar a pasta A PARTIR de onde vc está executando, que não quer dizer que é a pasta onde está a aplicação ou o jar. Assim como o Satangozo explicou. De outa forma, se criar um atalho na area de trabalho pra aplicação, o resultado disso vai ser o caminho pra área de trabalho. Já passei por isso, não é fácil assim resolver, vai precisar acessar o classloader e pegar a pasta onde o jar está, isso se estiver executando via jar, se for pela IDE já não funciona.

1 curtida

Olá Rodrigo obrigado pela ajuda. Na verdade o programa vai estar em JAR mesmo, mas tem algum método que funcione para os 2 (pois gostaria de testar para ver se realmente está funcionando). E ja que é em jar um simples pasta.mkdir() funciona?

O método que funciona para todo caso é o que eu disse lá encima… incluir uma variável de sistema com o caminho da sua aplicação… Mas essa forma de trabalhar não é muito “multiplataforma” e nem é elegante… Mas que funciona funciona…

Quando vc tem um programa que é executado clicando 2x no jar você não vai ter esse problema, afinal o comando de abrir foi disparado no caminho da sua aplicação, mas se por exemplo tiver um atalho em outra pasta ou um disparo automático pelo sistema você não pode garantir de onde essa execução foi disparada, e pior… Se você dispara via linha de comando de outro lugar mesmo especificando o caminho ele não entende a raiz do programa… então… outra forma que é um pouco menos agressiva que criar uma variável de sistema é criar um arquivo .bat (windows), ou .sh (linux) que caminhe até a pasta da aplicação dispare a execução…

Inclusive essa foi a saída encontrada pelo Glassfish por exemplo para executar o asadmin com “atalho”, ou isso, ou navegando até a pasta onde se encontra os asadmin…

Pra um programa que só precisa atender Windows, seria muito prático usar C# do que Java. Ou até mesmo um arquivo .bat como já falaram, para esta parte de criação de diretório.