# Browser öffnen _mit leerzeichen in URL_ ?



## jetic (26. Feb 2008)

Hallo,

aus meiner Java Applikation will ich den Hauptbrowser des Systems öffnen mit einer lokalen Datei als URL.

Mit BrowserLauncher2 sollte das eigentlich gut funktionieren, tut es aber nicht.

Leerzeichen in der URL verhindern das erfolgreiche Öffnen (unter Linux):


```
BrowserLauncher bl = new BrowserLauncher();
bl.openURLinBrowser("local/file one.html");
```

Der Browser (Iceweasel) öffnet jetzt zwei Tabs, weil er (offenbar?) davon ausgeht, dass ich zwei Strings als Argument übergebe:
eins:  file:///local/file
zwei: http://www.one.html

Wenn ich das Leerzeichen ersetze mit %20


```
bl.openURLinBrowser("local/file%20one.html");
```

öffnet der Browser
file:///local/file%25201.html

weil er das "%" an sich mit %25 ersetzt.


GIBT ES EINE LÖSUNG FÜR DAS PROBLEMCHEN?

DANKE!!!!!


----------



## Milo (26. Feb 2008)

Hi,

vielleicht hilft Dir die java.awt.Desktop Klasse weiter?


```
try { 
  Desktop.getDesktop().browse( new URI("http://example.org") ); 
} 
catch ( Exception e ) { 
  e.printStackTrace(); 
}
```

Micha


----------



## Janus (26. Feb 2008)

```
bl.openURLinBrowser("\"local/file one.html\"");
```


----------



## jetic (27. Feb 2008)

Danke für die Antwort!

die java.awt.Desktop Klasse gibts erst ab Java 1.6, ich entwickle noch in 1.5. Leider kann ich nicht umstellen, da die ganzen Institute und Server noch mit 1.5 arbeiten :-(

Und die zweite Lösung


```
bl.openURLinBrowser("\"local/file one.html\"");
```

funktioniert auch nicht:

2 Tabs im Browser:

eins: file:///"local/file 
zwei: http://www.one.html"


Für die Nachwelt...:
Ich hab mal nachgeschaut. Wenn man das Methodenargument urlString mit nem Debugger verfolgt, sieht man, dass der URL String einfach in den methods 

```
public static String replaceArgs(String commands,
                                     String browserArg,
                                     String urlArg) {
```
 (in LaunchingUtils.java) und 

```
private String[] getCommandLineArgs(String argsString,
                                                        String urlString) {
```
 (in StandardUnixBrowser.java)
zum commandline argument hinzugefügt wird. 
Die commandline wird dann an Leerzeichen gesplittet (.split("[ ]") ), um eine argumentliste zu erhalten. Ist nun ein Leerzeichen in der URL, wird auch sie gesplittet. 
Man kann das lösen, indem man die replaceArgs und getCommandLineArgs umschreibt: die URL wird aus dem commandline sring zuerst herausgenommen, dann wird gesplittet, dann wird die URL als eigenes argument an das argument array wieder drangehängt.
Dann kann man aber nicht BrowserLauncher2 als library einbinden, sondern eben nur seine editierte version.

Ab java 1.6 ist die viiieeel bessere Methode eben


```
File file = new File("/local/file one.html");
Desktop.getDesktop().browse( file.toURI() );
```

Das mit der File musste ich hier machen, weil der Dateiname an sich eine malformed URI gab... file.toURI() macht das automatisch wellformed (URI.createURI("c:\local\file one.html") ging z.B. nicht. aber eben file.toURI() ).

NACHTRAG::: LOESUNG!
==================

In java 1.5 funktioniert mit der ganz normalen BrowserLauncher2 lib:


```
File file = new File("/local/file one.html");
BrowserLauncher bl = new BrowserLauncher();
bl.openURLinBrowser( file.toURI().toString() );
```
(jedenfalls unter linux)[/code]


----------

