Obtendo o caminho do diretório para o arquivo .class que contém o principal

É possível obter o caminho para o meu arquivo .class contendo minha function principal de dentro do main?

URL main = Main.class.getResource("Main.class"); if (!"file".equalsIgnoreCase(main.getProtocol())) throw new IllegalStateException("Main class is not stored in a file."); File path = new File(main.getPath()); 

Observe que a maioria dos arquivos de class é montada em arquivos JAR, portanto, isso não funcionará em todos os casos (daí a IllegalStateException ). No entanto, você pode localizar o JAR que contém a class com essa técnica, e você pode obter o conteúdo do arquivo de class substituindo uma chamada por getResourceAsStream() no lugar de getResource() , e isso funcionará se a class estiver no sistema de arquivos ou em um JAR.

De acordo com http://www.cs.caltech.edu/courses/cs11/material/java/donnie/java-main.html , não. No entanto, sugiro ler $ 0 (Nome do Programa) em Java? Descubra a class principal? , que pelo menos te dá a class principal.

Para que você precisa disto? Se você precisar dele para obter quaisquer arquivos que estejam no mesmo diretório, é para isso que Class.getResourceAsStream () serve.

Isso parece mais com um problema do usuário final para mim. Considere também a possível necessidade de executar várias instâncias de qualquer aplicativo, e impedir que os usuários façam isso se tornará um grande aborrecimento.

Se o problema for com conflitos de arquivos temporários, apenas certifique-se de que todos os seus arquivos temporários tenham nomes exclusivos. Isso, no meu entender, é o motivo mais comum pelo qual as pessoas sentem a necessidade de impedir que várias instâncias de seus aplicativos sejam executadas.

PS: Os methods java.io.File.createTempFile () são ideais para evitar conflitos de arquivos temporários, porque eles geram automaticamente nomes de arquivos exclusivos.