Abrir HTML fora do JAR

5 respostas
S

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

5 Respostas

otaviofcs

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

otaviofcs

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

S

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.

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

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]

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();  
        }  
   }    
}

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.

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();
    }

Isso ae, obrigado a todos.

Abraços

otaviofcs

spidio,

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

S

Que isso cara.

Muito obrigado pela atenção.

Abraços.

Criado 30 de janeiro de 2008
Ultima resposta 31 de jan. de 2008
Respostas 5
Participantes 2