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/