2010-08-15 27 views
7

Voglio aprire Blocco note nel mio programma Java. Supponiamo che io abbia un pulsante se clicco su questo pulsante apparirà il blocco note. Ho già un nome di file e una directory.Come aprire il file del blocco note in java?

Come posso implementare questo caso?

+3

Cosa intendi esattamente per "blocco note"? Un programma di modifica del testo scadente utilizzato su Windows o un controllo TextArea?Perdonami per aver assunto "cose", ma sembra che tu non conosca le basi di Swing/AWT. – aviraldg

+1

... vuoi aprire il programma Blocco note o un file di testo che hai creato nel blocco note? – Stephen

risposta

6

Supponendo di voler avviare il programma di Windows notepad.exe, si sta cercando la funzione exec. Probabilmente si desidera chiamare qualcosa come:

Runtime runtime = Runtime.getRuntime(); 
Process process = runtime.exec("C:\\path\\to\\notepad.exe C:\\path\\to\\file.txt"); 

Per esempio, sul mio blocco note macchina si trova in C:\Windows\notepad.exe:

Runtime runtime = Runtime.getRuntime(); 
Process process = runtime.exec("C:\\Windows\\notepad.exe C:\\test.txt"); 

questo aprirà il blocco note con il file test.txt aprire per la modifica.

Nota è anche possibile specificare un terzo parametro su exec che è la directory di lavoro da eseguire, pertanto è possibile avviare un file di testo memorizzato rispetto alla directory di lavoro del programma.

2

Utilizzando SWT, è possibile avviare qualsiasi Se si desidera emulare il doppio clic su un testo in Windows, non è possibile solo con un JRE normale. È possibile utilizzare una libreria nativa come SWT e utilizzare il seguente codice per aprire un file:

org.eclipse.swt.program.Program.launch("c:\path\to\file.txt") 

Se non si desidera utilizzare un lib di terze parti, si dovrebbe conoscere e si sa dove è notepad.exe (o è visibile in PATH):

runtime.exec("notepad.exe c:\path\to\file.txt"); 

Apache common-exec è una buona libreria per gestire esecuzione processo esterno.

UPDATE: una risposta più completa alla tua domanda può essere trovato here

20

Prova

if (Desktop.isDesktopSupported()) { 
    Desktop.getDesktop().edit(file); 
} else { 
    // dunno, up to you to handle this 
} 

Assicurarsi che il file esiste. Grazie a Andreas_D che lo ha sottolineato.

+0

Si consiglia di aggiungere dettagli sulla versione richiesta di Java affinché funzioni. –

+1

Ehi, non lo sapevo. freddo. Ma - seconda linea deve leggere 'Desktop.getDesktop(). Edit (file);'. E il file deve essere creato, altrimenti si lamenterà con un 'IllegalArgumentException'. –

+0

Grazie a @Andreas, risolto. Assicurarsi che il file esista è parte del lavoro di guilgamos :) Buona cattura comunque, +1 – whiskeysierra

2

In IDE (Eclipse) contiene "C: \ percorso \ a \ notepad.exe C: \ percorso \ a \ file.txt". Quindi ho usato il seguente che funziona per me felice di mantenere me e il mio IDE: o) Speriamo che questo aiuti gli altri là fuori.

String fpath; 
fPath =System.getProperty("java.io.tmpdir")+"filename1" +getDateTime()+".txt"; 
//SA - Below launches the generated file, via explorer then delete the file "fPath" 
     try { 
     Runtime runtime = Runtime.getRuntime();   
     Process process = runtime.exec("explorer " + fPath); 

Thread.sleep(500); //lets give the OS some time to open the file before deleting 

    boolean success = (new File(fPath)).delete(); 
    if (!success) { 
     System.out.println("failed to delete file :"+fPath); 
     // Deletion failed 
    } 

} catch (InterruptedException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
} 
10

(supponendo che si desidera notepad per aprire il "myfile.txt" :)

ProcessBuilder pb = new ProcessBuilder("Notepad.exe", "myfile.txt"); 
pb.start(); 
2
String fileName = "C:\\Users\\Riyasam\\Documents\\NetBeansProjects\\Student Project\\src\\studentproject\\resources\\RealWorld.chm"; 
     String[] commands = {"cmd", "/c", fileName}; 
     try { 
      Runtime.getRuntime().exec(commands); 
//Runtime.getRuntime().exec("C:\\Users\\Riyasam\\Documents\\NetBeansProjects\\SwingTest\\src\\Test\\RealWorld.chm"); 
     } catch (Exception ex) { 
      ex.printStackTrace(); 
     } 
0

Si potrebbe fare questo al meglio se si avvia il blocco note nella riga di comando con il comando: avviare Blocco note

String[] startNotePadWithoutAdminPermissions = new String[] {"CMD.EXE", "/C", "start" "notepad" }; 

Language serie di comandi di stringa e dare come parametr in exec

Process runtimeProcess = Runtime.getRuntime().exec(startNotepadAdmin2); 
runtimeProcess.waitFor();