# Explorer / Standardprogramm öffnen unter 1.4



## meister-g (30. Jun 2007)

Hallo,

ich möchte über einen JFileChoser Dateien entweder
- mit dem Standardprogramm öffnen
oder
- den Ordner der Datei im Windows-Explorer öffnen

Da gibt es ja:
ProcessBuilder - erst ab 1.5
Desktop.open() - erst ab 1.6

gibt es irgendeine Mögklichkeit für eine der genannten Varianten unter Java 1.4?

Runtime.exec() spielt da ja leider nicht mit.

Plattformunabhängigkeit ist kein Thema, ist immer unter Windows im Einsatz.


Gruss,
Rainer


----------



## André Uhres (1. Jul 2007)

```
package basics;
/*
 * RunExplorer.java
 */
import java.awt.*;
import java.io.*;
import javax.swing.*;
public class RunExplorer {
    private Runtime rt = Runtime.getRuntime();
    private Process p;
    private String name;
    public RunExplorer() {
        JFileChooser fileChooser = new JFileChooser();
        switch (fileChooser.showOpenDialog(null)) {
            case JFileChooser.APPROVE_OPTION:
                File file = fileChooser.getSelectedFile();
                name = file.getParent();
                try {
                    callExplorer(name);
                } catch (InterruptedException ex) {
                    ex.printStackTrace();
                } catch (IOException ex) {
                    ex.printStackTrace();
                }
                break;
            case JFileChooser.CANCEL_OPTION:
                break;
        }
        System.exit(0);
    }
    private void callExplorer(final String ordnerDerDatei) throws IOException, InterruptedException{
        p = rt.exec("cmd.exe /C "+"call explorer "+ordnerDerDatei);
        p.waitFor();
    }
    public static void main(final String[] args) {new RunExplorer();}
}
```


----------



## meister-g (1. Jul 2007)

ah, über cmd.exe, vielen dank.


----------



## meister-g (1. Jul 2007)

Das mit dem Explorer klappt einwandfrei.

Aber wie kann ich eine ausgewählte Datei mit dem Standardprogramm öffnen?

Hat wohl eher weniger mit Java als mit cmd.exe und den richtigen Parametern zu tun - ich habe aber leider nichts dazu gefunden, vielleicht kann mir hier jemand weiterhelfen?!


----------



## André Uhres (1. Jul 2007)

So geht's zumindest wenn keine Leerzeichen im Pfad sind:

```
package basics;
/*
 * RunApplication.java
 */
import java.awt.*;
import java.io.*;
import javax.swing.*;
public class RunApplication {
    private Runtime rt = Runtime.getRuntime();
    private Process p;
    private String name;
    public RunApplication() {
        JFileChooser fileChooser = new JFileChooser();
        switch (fileChooser.showOpenDialog(null)) {
            case JFileChooser.APPROVE_OPTION:
                File file = fileChooser.getSelectedFile();
                try {
                    callApplication(file);
                } catch (InterruptedException ex) {
                    ex.printStackTrace();
                } catch (IOException ex) {
                    ex.printStackTrace();
                }
                break;
            case JFileChooser.CANCEL_OPTION:
                break;
        }
        System.exit(0);
    }
    private void callApplication(final File file) throws IOException, InterruptedException{
// if the file is an "exe", then it is launched like this
        if(file.getName().indexOf(".exe") > 0 ) {
            Runtime.getRuntime().exec("rundll32 " +
                    "url.dll,FileProtocolHandler " + file.getName());
        }
// for files which are not applications themselves,
// this will launch the application windows would've launched to open the file
        else {
            System.out.println(file.getAbsoluteFile());
            Runtime.getRuntime().exec(new String[]
            {"rundll32", "url.dll,FileProtocolHandler",
             "file:///" + file.getAbsoluteFile()});
        }
    }
    public static void main(final String[] args) {new RunApplication();}
}
```


----------



## André Uhres (1. Jul 2007)

Oder so:

```
private void callApplication(final File file) throws IOException, InterruptedException{
        rt.exec("cmd.exe /C "+"\""+file.getAbsolutePath()+"\"");
    }
```


----------



## Atariman (10. Jul 2007)

Hi,

vielleicht hilft Dir das Bogatyr-Framework weiter, dort hat es unter vielem Anderem auch einen ProcessUtility, dass Dir die Programme startet.

http://code.google.com/p/bogatyr/


Gruss
Atariman


----------

