Abrir HTML fora do JAR

Bom dia à todos, preciso de uma grande ajuda.

Fiz uma aplicação e vou criar um help pra ela. Gostaria de criar esse help em HTML. Vou inserir uma opção no menu para acessa-lo. Vou distribuir o help fora do Jar, como uma aplicação independente.

Como eu poderia fazer pra “pegar” o caminho do meu HTML que estará fora do JAR? Lembrando que pode variar de pasta para pasta, ou seja, o cara pode salvar em C:/Aplicacao, ou C:/Downloads, ou até no linux.

Eu ja tenho uma classe que abre o browser padrão instalado no computador, consigo abrir endereços estáticos tipo www.guj.com.br mas meu problema é pegar esse caminho dinâmico =/

Grato

Leonardo

Já tiveram tópicos falando de coisas parecidas, dá uma busca.

Eu faria mais ou menos assim. Supondo que o arquivo a recuperar seja passado com o parâmetro name, eu abriria ele numa class da jar usando o getResourceAsStream. Depois, criaria um BufferedOutputStream para jogar o array de bytes recuperado (InputStream) e o flush para enviar o arquivo de volta. Meio mal explicado e o exemplo pode conter incorreções pois bati na hora, sem testar…

InputStream in = this.getClass().getResourceAsStream("help/" + name); if(in == null) { throw new NotAvaliableException("Sem help a recuperar."); } int index = in.read(by, 0, 32768); BufferedOutputStream out = new BufferedOutputStream(response.getOutputStream()); response.setContentType("text/html"); while (index != -1) { out.write(by, 0, index); index = in.read(by, 0, 32768); } out.flush();

boa sorte,

otávio

relendo, vi um “erro”. na verdade, no getResourceAsStream entra o caminho relativo dentro da jar que você está acessando, ok?

Ja conseguir resolver, muito obrigado.

Vou postar a solução, caso alguem precise.

1) Pegar caminho do JAR: usei o System.getProperty(“user.dir”), que me retornou o caminho do Jar. com isso eu só adicionei o “file:///” na frente do caminho e o “/help/help.html” para completar o endereço do arquivo a ser aberto no Browser.

[code]AbreBrowser browser = new AbreBrowser();

String URL = (“file:///”+System.getProperty(“user.dir”) + “/help/help.html”);
String URLSend = browser.URLCaracteresInvalidos(URL);

browser.AbreBrowser(URLSend)[/code]

2) Source da classe AbreBrowser: Esta classe não foi implementada por mim, quem me passou foi ViniGodoy, usuário daqui do GUJ. A única coisa que esta diferente é o método que eu criei URLCaracteresInvalidos.[/b]

[code]
public class AbreBrowser{

public static String URLCaracteresInvalidos(String URL){
    
    final StringBuilder result = new StringBuilder();
    final StringCharacterIterator iterator = new StringCharacterIterator(URL);
    char character =  iterator.current();
    while (character != CharacterIterator.DONE ) {
        if (character == '\\') {
            result.append("/");
        } else if (character == ' ') {
            result.append("%20");
        } else { 
            result.append(character);
        }
    character = iterator.next();
    }
    return result.toString();
}

public void AbreBrowser(String URL){

Desktop desktop = null;     
   //Primeiro verificamos se é possível a integração com o desktop     
   if (!Desktop.isDesktopSupported())     
        throw new IllegalStateException("Desktop resources not supported!");     
        
    desktop = Desktop.getDesktop();     
    //Agora vemos se é possível disparar o browser default.     
    if (!desktop.isSupported(Desktop.Action.BROWSE))     
        throw new IllegalStateException("No default browser set!");     
        
    //Pega a URI de um componente de texto.     
    URI uri = null;  
    try {  
        uri = new URI(URL);  
    } catch (URISyntaxException e1) {  
        e1.printStackTrace();  
    }     
        
    //Dispara o browser default, que pode ser o Explorer, Firefox ou outro.     
    try {  
        desktop.browse(uri);  
    } catch (IOException e) {  
        e.printStackTrace();  
    }  

}
}[/code]

3) Tratar endereço URL: na classe AbreBrowser, esta implementada uma rotina que utiliza a clase URL, essa classe por vez não aceita alguns caracteres como “” e " " na URL, então estava ocorrendo um erro ao enviar o endereço no Browser. Pra resolver, criei um metodo nessa classe pra tratar a URL antes de envia-la ao brownser, então tudo que é “” (ou “\” no Java) ele substitui por “/” e tudo que é " " (espaço), substitui por %20.

[code]
public static String URLCaracteresInvalidos(String URL){

    final StringBuilder result = new StringBuilder();
    final StringCharacterIterator iterator = new StringCharacterIterator(URL);
    char character =  iterator.current();
    while (character != CharacterIterator.DONE ) {
        if (character == '\\') {
            result.append("/");
        } else if (character == ' ') {
            result.append("%20");
        } else { 
            result.append(character);
        }
    character = iterator.next();
    }
    return result.toString();
}[/code]

Isso ae, obrigado a todos.

Abraços

spidio,

li errado e achei que os arquivos fossem estar dentro da jar…

Que isso cara.

Muito obrigado pela atenção.

Abraços.