# Datei zum Bearbeiten mit externem Programm öffnen



## BeSp (26. Jan 2007)

Hallo,
ich möchte auf durch den Druck auf einen Button eine Text-Datei in einem Editor (z.b. Notepad, oder denjenigen der zum Bearbeiten von Textdateien standardmäßig vorgesehen ist) öffnen lassen. Mit diesem dann die geöffnete Datei bearbeiten, speichern, etc. 

Wie könnte sowas gehen?


----------



## Leroy42 (26. Jan 2007)

Such' mal im Forum nach "externes Programm starten"

Leider kann ich dir kein Link geben, da die Suchparameter in
diesem Forum nicht per GET-Aufruf übergeben werden.


----------



## BeSp (26. Jan 2007)

Wie man ein externes Programm aufruft das hab ich also schon rausgefunden

```
Runtime.getRuntime().exec(" xyz.exe ");
```

Jetzt sei mir aber nur die zu öffnende Textdatei bekannt und nicht das Programm welches ich per .exe angeben könnte, da mein Programm auch auf anderen Rechnern laufen soll.

mfg


----------



## Leroy42 (26. Jan 2007)

Wenn eine Verknüpfung zur Dateiendung existiert,
reicht es einfach aus _als Programm_ den Namen deines Dokuments aufzurufen.-


----------



## BeSp (29. Jan 2007)

Ich habe das jetzt mal probiert, und zwar hiermit:

```
try {
  Runtime.getRuntime().exec("c:/test.txt");
} catch (IOException e1) {
  e1.printStackTrace();
}
```
Das produziert allerdings eine Exception: "java.io.IOException: CreateProcess: c:\test.txt error=193"

Unter "Ausführen" (Windowstaste + R) lässt sich der Befehl "c:/test.txt" allerding ausführen und ein Editorfenster springt auf.


----------



## The_S (29. Jan 2007)

versuch mal obs klappt, wenn du ein "cmd /c" vorneweg stellst.


----------



## BeSp (29. Jan 2007)

Wunderbar, das funktioniert...
Aber damit macht man das ganze doch auf Windows fixiert oder? Denn es soll ja auch, laut Spezifikation unter Linux funktionieren.. Gibts da einen ähnlichen Kniff?


----------



## The_S (29. Jan 2007)

nein, unter linux kannst du überhaupt keine "Dateien" ausführen. Da müsstest du das entsprechende Programm (pfad) mitsamt parameter aufrufen und hoffen, dass diese auch von dem Prog interpretiert werden.


----------



## BeSp (29. Jan 2007)

Okay danke, da haben wir ja schon die Lösung des Problems .. So wird das also nicht eingebaut werden können 
Oder kann man vor Aufruf dieser Programmzeilen auf Windows-/Linux-Umgebung testen?  ???:L


----------



## The_S (29. Jan 2007)

joa, kann man


```
System.getProperty("os.name");
```


----------



## DocRandom (29. Jan 2007)

Hobbit_Im_Blutrausch hat gesagt.:
			
		

> nein, unter linux kannst du überhaupt keine "Dateien" ausführen. Da müsstest du das entsprechende Programm (pfad) mitsamt parameter aufrufen ....


..und das ist auch gut so 

lg
DocRandom


----------



## BeSp (29. Jan 2007)

Ich danke euch


----------



## Leroy42 (29. Jan 2007)

DocRandom hat gesagt.:
			
		

> Hobbit_Im_Blutrausch hat gesagt.:
> 
> 
> 
> ...



Warum?  :shock: 

Ernstgemeinte Frage!


----------



## DocRandom (30. Jan 2007)

Unter Windoof darf im Prinzip jeder alles, daher auch die Anfälligkeit für Viren, Trojaner, etc.
Unter Linux/Unix/Derivative , darf nur der Benutzer 'root' alles.
Der/die Benutzer (User) dürfen fast alles in Ihrem 'HOME-Verzeichnis' machen, aber auch da gibt es mitunter Einschränkungen.
Da speziell unter Linux/Unix/Derivative die Systeme nie gleich aufgebaut sind; außer man/frau verwendet FHS (File Hirachie Standard); ist es auch nicht so leicht diverse Programme einzuschleusen, außer ein(e) Depp(in) arbeitet ständig unter dem User 'root'.
Wenn man/frau also Plattform unabhängige Programme entwickelt; wofür sich JAVA unter anderem ja am besten eignet; tut man gut daran, externe Programme mit genauer Pfadangabe über Properties einzubinden.
Dies hatte Windows früher ja auch per *.INI Dateien gemacht.

mfg
DocRandom


----------



## chamaeleon879 (6. Feb 2007)

Also ich bin selber Linux - Fan und Java Entwickler. Aber die Argumentation von DocRadom das es gut ist, dass jedes System bei Linux anders aussieht kann ich überhaupt nicht teilen. Wenn es die Linuxgemeinde endlich schaffen würde einen einheitlichen "Unterbau" zu schaffen, würden bestimmt auch Firmen endlich bessere Unterstützung für Linux bieten. Momentan muss man (wenn man es anwenderfreundlich machen möchte) für etliche Distributionen Installationspakete erstellen. Meiner Meinung nach würden folgende "kleinen" (ok, ok ich weiß, dass wird nicht gelingen) Änderungen Linux zum Durchbruch verhelfen:
1. Einheitliche Paketsystem
2. Einheitlicher "Unterbau"
3. Schnittstelle für propritäre Treiber

Um mal kurz zum eigentlichen Thema zurückzukommen
Seit Java 6 gibt es folgende Möglichkeit:
Über die Klasse java.awt.Desktop können StandardProgramme geöffnet werden. bspw folgende Methoden:
- browse() öffnet Browser
- open() lädt eine Datei mit der für Ihr registrierten Typ 
- print() Druck mit der entsprechenden Anwendung

PS.: und das was "Hobbit_Im_Blutrausch" schreibt ist falsch.
Man kann sehr wohl unter Linux Dateien mit Programmen verknüpfen wie in Windows.
In Windows steht das zeug in der Registry aber auch hier BENÖTIGST du den PFAD zum Programm!!!!!!!!!
Unter Linux steht das halt nicht inder Registry sondern in der PATH Variablen...
Wenn man also unter Linux eine Datei namens "text.txt" aufruft, funktioniert das selbstverständlich.
Ein unterschied ist, dass Linux die Datei auch ohne Endung, also nur "text" korrekt öffnen würde, da es nicht nach der Dateiändung zuordnet, sonder nach Dateiinhalt.


----------



## b0unc3 (5. Apr 2007)

ich muss das Thema nochma wachrufen...

ich versuche eine .txt datei zu öffnen.. das scheint auch zu klappen.. nur leider öffnet er sie nicht, aber das müsste er doch oder?


```
import java.io.*;

public class IgNAIO {
	public static void main(String[] args) {
		BufferedReader r = new BufferedReader(
				new InputStreamReader(System.in));
		
		try {
			Runtime.getRuntime().exec("cmd /d:\\Workspace\\Java\\IgNAIO\\bin\\test.txt");
			System.out.println("Datei geöffnet");
		} catch (IOException ex) {
			ex.printStackTrace();
		}
		System.out.println("Zum beenden Enter drücken");
		try {
			r.readLine();
		} catch (IOException ex) {
			ex.getMessage();
		}
	}
}
```

zur laufzeit bekomme ich folgende ausgabe:

Datei geöffnet
Zum beenden Enter drücken


----------



## Wildcard (5. Apr 2007)

Was macht Windows denn wenn man den Namen einer txt Datei in der Eingabeaufforderung eingibt?
Öffnet sich da was?  :shock:


----------



## b0unc3 (6. Apr 2007)

joa dann wirds geöffnet    :?:  :?:


----------



## Wildcard (6. Apr 2007)

Kann auf Linux schlecht nachvollziehen, aber ich empfehle dir den Java 6 Weg:

```
Desktop.open(file);
```


----------



## b0unc3 (6. Apr 2007)

in welchem packet ist das?


----------



## Wildcard (6. Apr 2007)

http://java.sun.com/javase/6/docs/api/java/awt/Desktop.html


----------



## b0unc3 (6. Apr 2007)

juhuu so gehts danke ..  jez hab ich nur noch 1 prob.. wie kann ich den Pfad erfragen, von wo aus das Programm gestartet wurde? Ich will dann später die txt files mit ins .jar file packen.. aber das hat ja dann jeder wo anders liegen ^^

//edit:

achja und komm ich dann auch ins jar file rein?


----------



## Wildcard (6. Apr 2007)

Resourcen aus einer jar lädt man über den Classloader (getClass().getResource ), wo das jar liegt ist dafür nicht relevant.


----------



## b0unc3 (6. Apr 2007)

okay dankeschön


----------



## b0unc3 (6. Apr 2007)

also.. ich hab mein programm aus eclipse raus exportiert (als .jar file).. dann hab ich die datei (Datei.rar) direkt ins .jar file gepackt (also keine unterordner).. wenn ich aber nun auf den Button drauf klicke, dann passiert nichts, außer das der button solange "gedrückt" erscheint, bis ich mit dem courser von dem button runter gehe...


```
try {
				Desktop.getDesktop().open(new File(getClass().getResource("Datei.rar").toString()));
			} catch (IOException ex) {
				JOptionPane.showMessageDialog(null, ex.getMessage());
			}
```

kann mir jemand sagen, was ich falsch gemacht hab? ^^


----------



## The_S (6. Apr 2007)

b0unc3 hat gesagt.:
			
		

> ich muss das Thema nochma wachrufen...
> 
> ich versuche eine .txt datei zu öffnen.. das scheint auch zu klappen.. nur leider öffnet er sie nicht, aber das müsste er doch oder?
> 
> ...



Äh, was soll das denn sein? Das /c steht für Command und nicht für den Laufwerksbuchstaben! Dein Befehl muss


```
Runtime.getRuntime().exec("cmd /c D:\\Workspace\\Java\\IgNAIO\\bin\\test.txt");
```

Warum willst du denn die Textdatei unbedingt in dem Editor öffnen? Solang es sich nur um eine pure Textdatei handelt, kannst du sie ja auch in einem extra Fenster in einem JTextArea öffnen. Das wäre dann auch Plattformunabhängig ...


----------



## b0unc3 (6. Apr 2007)

es war einfach nur ein test zum öffnen von dateien.. zu meinem anderen problem haste nich zufällig ne lösung? ^^


----------



## b0unc3 (6. Apr 2007)

kann mir wirklich keiner helfen?? :'(


----------



## chamaeleon879 (7. Apr 2007)

Schau mal diesen thread an, sollte dein Problem lösen
http://www.java-forum.org/de/viewtopic.php?t=45225&highlight=xml+jar


----------



## b0unc3 (7. Apr 2007)

hab da jetzt mal reingeschaut udn n bisl hin und her probiert.. mein code sieht jetzt so aus:


```
try {
				InputStream is = getClass().getClassLoader().getSystemResourceAsStream("Datei.rar");
				System.out.println(is.read()); // Ausgabe: 82
			} catch (Exception ex) {
				System.err.println(ex);
				JOptionPane.showMessageDialog(null, ex.getMessage());
			}
```

allerdings öffnet sich die datei "Datei.rar" nicht


----------



## The_S (7. Apr 2007)

Damit haste auch nur nen Stream von dem du liest. Das hat mit dem öffnen von Dateien im Jar rein gar nichts zu tun.

Warum brauchst du das denn so unbedingt?


----------



## b0unc3 (7. Apr 2007)

und wie kann ich die datei dann öffnen? mit Desktop.getDesktop().open(File) << das geht ja nit der nimmt ja nur Files..

wollte das mal zur übung machen, damit ich auch ma n bisl in das arbeiten mit files reinkomme.. nur iwiw hab ich mir das ganze leichter vorgestellt ^^


----------



## Wildcard (7. Apr 2007)

Als Stream nützt dir das nichts.
Du brauchst getResource, das liefert dir eine URL und daraus kannst du dir ein File Objekt basteln.


----------



## Guest (7. Apr 2007)

danke... hab das ganze jez so


```
File f = new File(getClass().getResource("Datei.rar").toURI());
				Desktop.getDesktop().open(f);
```

in eclipse funzt das auch (Die Datei "Datei.rar" ist im bin ordner).. da wird die datei geöffnet, aber wenn ich das ganze dann als jar exportiere und die Datei.rar mit da rein packe (nachträglich) dann bekomm ich folgende meldung:



> URI is not hierarchical


----------



## b0unc3 (8. Apr 2007)

der post war von mir, war nich eingeloggt^^


----------



## b0unc3 (8. Apr 2007)

ich hab noch mal gegoogelt und binn auf folgendes gestoßen:



> Why are you trying to create a File object from your resource? Are you not aware that if your app lives in a Jar, for example, you can't use the File API on it (because it isn't a 'file' at that point). Are you wanting to open that resource?
> Use getClass().getResourceAsStream(pathjasper) - assuming pathjasper is correct in the first place, that is.



kann mir jemand sagen, wie ich das mit 


```
getClass().getResourceAsStream(pathjasper)
```

umsetzen kann?, also auch so, dass sich das öffnet?


----------



## Guest (11. Apr 2007)

*push*   :roll: 

ich hab echt alles versucht, ich schaffs einfach nit  :cry:


----------



## Wildcard (11. Apr 2007)

Jau...
Kann man mit jar Resourcen so nicht machen. Die Datei müsstest du rauskopieren.


----------



## b0unc3 (11. Apr 2007)

okay danke ersma.. aber wie mach ich n das am besten? ich hab jez mal folgendes versucht:


```
try {
				FileInputStream fis = null;
				FileOutputStream fos = null;
				File f = null;
				
				fis = new FileInputStream(new File((getClass().getResourceAsStream("DFind.rar").toString())));
				fos = new FileOutputStream(f.createTempFile("data", ".rar"));
			} catch (Exception ex) {
				System.err.println(ex);
				JOptionPane.showMessageDialog(null, ex.getMessage());
			}
```

würde das so gehen? falls ja, wie soll ich jez an das temp file dran kommen?.. falls nein, wie dann? ^^

Mfg. b0unc3


----------



## The_S (11. Apr 2007)

Nochmal die Frage:

Was machst du da eigentlich? Bzw. was willst du machen? Könnte mir vorstellen, dass du da viel zu komplex denkst. Warum willst du die Datei unbedingt "starten"? Warum muss die Datei unbedingt in einem Jar liegen? Du weißt, dass das Plattformabhängig ist?


----------



## b0unc3 (11. Apr 2007)

also.. ich habe vor mir so eine art "starterprogramm" zu schreiben, wo dann ein paar kleinere Programme drinne sind, die man dann einfach per klick starten kann oder halt auch rar dateien, txt, etc. .. der hauptgrund warum ich das mache ist, damit ich was lerne.


----------



## The_S (11. Apr 2007)

Du wirst aber wohl kaum Dateien IN deinem Jar öffnen wollen oder?


----------



## b0unc3 (11. Apr 2007)

doch hatte ich eigentlich vor, aber da ich ja jetzt weiß, dass es nicht geht, lass ich die dateien einfach draußen in unterordnern  :roll:

Ps.: Danke nochmal für eure Hilfe


----------



## The_S (11. Apr 2007)

Ein "Starterprogramm", welches Dateien startet, die im Jar liegen? Den Sinn versteh ich zwar nicht, aber hat sich jetzt ja eh erledigt


----------

