PDA

Visualizza la versione completa : [JAVA] Aprire un file di Windows


abcd1000
25-10-2005, 17:41
Ho un programma java che mi permette di selezionare un file di testo salvato sul pc
Vorrei sapere come fare per far aprire il file di testo selezionato al programma che di default si occupa di aprire i file di testo (tipicamente microsoft word oppure openoffice)

Mi spiego meglio
seleziono un file da un programma java (swing)
premo un bottone del programma java (un jbutton)
si deve aprire il file con l'editor di testo installato nel S.O. (win Xp)

Andrea1979
25-10-2005, 17:50
in WINDOWS e solo lì, puoi sempre provare ad "eseguire" il file, anche se non è .exe... non avrai la garanzia che la cosa funzioni, però quasi certamente andrà... e questo è il metodo birba (e te ne esci con due righe, usando Runtime)

Altro metodo: determinare quale sia effettivamente la applicazione predefinita nel sistema per quel particolare tipo di file... qui la cosa si complica, ma c'è almeno una libreria che dovrebbe aiutarti in tutto ciò:

https://jdic.dev.java.net/

Buone letture.

abcd1000
25-10-2005, 18:50
Ho provato questo codice ma non funziona


public static void openFile() {
String[] command = { "test.doc" };

try {
Runtime rt = Runtime.getRuntime();

Process proc = rt.exec(command);
}
catch (Exception e) {
e.printStackTrace();
}
}


cosa devo mettere nel command?

abcd1000
26-10-2005, 15:02
help

LeleFT
27-10-2005, 14:07
Per utilizzare la funzione di apertura automatica del programma associato (cosa che funziona solo sotto Windows), devi richiamare il programma START:


String [] comando = {"C:\\Windows\\System32\\START.EXE", "test.doc"};
try {
Runtime.getRuntime().exec( comando );
} catch (Exception e) { e.printStackTrace(); }

Ciao. :ciauz:

Andrea1979
27-10-2005, 14:36
io faccio così, chiaramente solo Windows



public class eseguiDocumento {
public eseguiDocumento(String doc) {
if (!doc.startsWith("\"") && !doc.endsWith("\"") && doc.indexOf(" ")!=-1) {
doc="\""+doc+"\"";
}
String command = "cmd /c "+doc;
try {
Runtime r = Runtime.getRuntime();
Process p = r.exec(command);
}
catch (Exception e) {
System.out.println(e.toString());
}
}

public static void main (String[] args) {
eseguiDocumento word = new eseguiDocumento("C:/Documents and Settings/Andrea/Desktop/Dokken.doc");
eseguiDocumento excel = new eseguiDocumento("C:\\Documents and Settings\\Andrea\\Desktop\\video list.xls");
eseguiDocumento acrobat = new eseguiDocumento("C:\\Documents and Settings\\Andrea\\Desktop\\bound.pdf");
}
}

LeleFT
27-10-2005, 14:44
E' equivalente... solo che utilizzando il comando START viene rilasciata la console (quindi il processo che lancia il comando viene terminato), mentre con CMD /C la console rimane bloccata finchè non viene chiuso il documento aperto.

Veda l'autore del post quali sono le sue esigenze. :)


Ciao. :ciauz:

abcd1000
27-10-2005, 17:14
Se come nome del file gli passo
d:\prova.doc

funziona, ma siccome il nome del file lo costruisconel seguente modo

String fileAbsPath = dir + File.separator + fileName

il nome mi diventa

d:\\prova.doc <--doppia barra

Ed il comando non mi apre il file, questo è dovuto alla doppia barra

Come faccio a dirgli di separarmi le due stringhe da una barra sola?

abcd1000
28-10-2005, 12:49
utilizzo win xp s.p.2 e java 1.4.06

Utilizzando il comando
String [] comando = {"C:\\Windows\\System32\\START.EXE", "d:\\prova.doc"};
mi viene dato quest'errore

java.io.IOException: CreateProcess: C:\Windows\System32\START.EXE d:\prova.doc error=2
at java.lang.Win32Process.create(Native Method)
at java.lang.Win32Process.<init>(Win32Process.java:66)
at java.lang.Runtime.execInternal(Native Method)
at java.lang.Runtime.exec(Runtime.java:566)
at java.lang.Runtime.exec(Runtime.java:491)
at java.lang.Runtime.exec(Runtime.java:457)
at it.siai.util.FileUtil.openFile(FileUtil.java:196)

Mentre utilizzando questo comando
String command = "cmd /c "+"d:\\prova.doc";
la prima volta il documento viene aperto (e lo chiudo) mentre la seconda volta che lo eseguo mi dice:

Impossibile accedere al file. Il file è utilizzato da un altro processo.

LeleFT
28-10-2005, 13:07
Originariamente inviato da abcd1000
Se come nome del file gli passo
d:\prova.doc

funziona, ma siccome il nome del file lo costruisconel seguente modo

String fileAbsPath = dir + File.separator + fileName

il nome mi diventa

d:\\prova.doc <--doppia barra

Ed il comando non mi apre il file, questo è dovuto alla doppia barra

Come faccio a dirgli di separarmi le due stringhe da una barra sola?
Togli la parte evidenziata :)


Ciao. :ciauz:

Loading