O Classloader fornece dois métodos para obter recursos do ClassPath carregado:
URL público getResource (nome da string); Public inputStream getResourceasStream (nome da string);
Aqui o nome é o caminho de classe do recurso, que é relativo ao caminho raiz "/". O GetResource recebe um objeto de URL para localizar o recurso, e GetResourCeasStream recebe a referência ao fluxo de entrada de recursos para garantir que o programa possa extrair dados do local correto.
Mas o que realmente usamos não são os métodos de classe de classe, mas os métodos GetResource e GetResourceasStream da classe, porque o objeto de classe pode ser obtido da sua classe (como YourClass.Class ou YourClass.getClass ()), e o carregador de classe precisa ligar para o método YourClass.GlassLoader () novamente. No entanto, de acordo com a documentação do JDK, esses dois métodos do objeto de classe são realmente "delegados" ao carregador de classe que o carrega, então você só precisa usar esses dois métodos do objeto de classe.
Portanto, chame diretamente isso.getclass (). GetResourceasStream (nome da string) para obter o fluxo e usar o classelloader.getSystemResourceasStream (nome da string) no método estático.
Aqui estão algumas maneiras de obter o caminho de classe e o caminho absoluto para a classe atual. Pode ser necessário usar alguns desses métodos para obter o caminho absoluto para os recursos necessários.
1.This.getClass (). GetResource ("")
O que você obtém é o diretório URI do arquivo de classe atual. Não incluir você!
Por exemplo: arquivo:/d:/workspace/jbpmtest3/bin/com/test/
2.This.getclass (). GetResource ("/")
O que você recebe é o caminho absoluto do URI do caminho de classe atual.
Por exemplo: arquivo:/d:/workspace/jbpmtest3/bin/
3.This.getClass () .getclassloader (). GetResource ("")
O que você obtém também é o caminho absoluto do URI do caminho de classe atual.
Por exemplo: arquivo:/d:/workspace/jbpmtest3/bin/
4.ClassLoader.GetSystemResource ("")
O que você obtém também é o caminho absoluto do URI do caminho de classe atual.
Por exemplo: arquivo:/d:/workspace/jbpmtest3/bin/
5.Thread.CurrentThread (). GetContextClassLoader (). GetResource ("")
O que você obtém também é o caminho absoluto do URI do caminho de classe atual.
Por exemplo: arquivo:/d:/workspace/jbpmtest3/bin/
6.ServletActionContext.getServletContext (). GetRealPath ("/")
Em um aplicativo da web, obtenha o caminho absoluto para o diretório raiz do aplicativo da web. Dessa forma, precisamos fornecer apenas um caminho em relação ao diretório raiz do aplicativo da web para criar um caminho absoluto para localizar recursos.
Por exemplo: arquivo: /d:/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/webproject
Observação:
1. Tente não usar o caminho relativo em relação ao System.getProperty ("user.dir") Diretório de usuário atual. Esta é uma bomba -relógio que pode matá -lo a qualquer momento.
2. Tente usar recursos absolutos do caminho na forma de URI. Ele pode ser facilmente convertido em objetos URI, URL e arquivo.
3. Tente usar pathes de classe relativos. Não use caminhos absolutos. Usando o método público de URL estático GetExtendResource (String RelityPath) da classe ClassloadRutil acima, você já pode localizar recursos em todos os locais usando o caminho relativo em relação ao caminho de classe.
4. Absolutamente não use caminhos absolutos com código duro. Porque, podemos usar o método getResource ("") da classe Classloader para obter o caminho absoluto do caminho de classe atual. Se você precisar especificar um caminho absoluto, o uso de arquivos de configuração também é muito melhor do que o codificado!
Como conseguir um caminho fora do caminho de classe:
URL base = this.getClass (). GetResource (""); // Primeiro, obtenha a localização desta classe, como/home/Popeye/testJava/Build/Classes/Net/
String Path = new File (base.getFile (), "…/…/…/”+nome) .getCanonicalPath (); // você pode obter/home/Popeye/testjava/nome
Além disso, se você iniciar o programa da Ant, o recuperado deste.getclass (). GetResource ("" é bastante estranho e você pode depurar com sucesso com a linha de comando java.
Vamos dar uma olhada no método para obter o caminho de classe em java
Eu disse muito mais, então postarei o código -chave diretamente para você. O código específico é o seguinte:
<span style = "font-size: 18px;"> System.out.println ("++++++++++++++++++++++++++++++++++++"); String Path = System.getProperty ("Java.class.Path.Path"); String Path2 = Freemarkerwriter.class.getProtectionDomain (). Thread.currentThread (). GetContextClassLoader (). GetResource (""). GetPath (); system.out.println ("caminho 1 =" + path); system.out.println ("path 2 =" + path); system.out.println ("Path 3 =" Path3); System.out.out.out.out.out.50; path4); system.out.println ("++++++++++++++++++++++++++++++++++"); </span>O exposto acima é o código simples do método para obter o ClassPathPath em Java apresentado a você pelo editor. Espero que seja útil para você. Se você tiver alguma dúvida, deixe -me uma mensagem. O editor responderá a você a tempo!