2010-08-15 545 views
7

Quiero abrir el Bloc de notas en mi programa Java. Supongamos que tengo un botón si hago clic en este botón y aparecerá el bloc de notas. Ya tengo un nombre de archivo y un directorio.¿Cómo abrir el archivo del bloc de notas en java?

¿Cómo puedo implementar este caso?

+3

¿A qué se refieren exactamente por 'notepad'? ¿Un programa de edición de texto cutre usado en Windows, o un control TextArea?Perdóname por asumir "cosas", pero parece que no conoces los conceptos básicos de Swing/AWT. – aviraldg

+1

... ¿Quieres abrir el programa de bloc de notas, o un archivo de texto que creaste en el bloc de notas? – Stephen

Respuesta

6

Suponiendo que desea iniciar el programa de Windows notepad.exe, está buscando la función exec. Es posible que desee llamar algo así como:

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

Por ejemplo, en mi bloc de notas máquina se encuentra en C:\Windows\notepad.exe:

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

Esto abrirá el bloc de notas con el archivo test.txt abrir para su edición.

Tenga en cuenta que también puede especificar un tercer parámetro para exec, que es el directorio de trabajo para ejecutar, por lo tanto, podría iniciar un archivo de texto almacenado en relación con el directorio de trabajo de su programa.

2

Usando SWT, puede ejecutar cualquier Si desea emular haciendo doble clic en un texto en Windows, no es posible solo con un JRE simple. Se puede utilizar una biblioteca nativa como SWT y pega el siguiente código para abrir un archivo:

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

Si no desea utilizar una librería de terceros, usted debe conocer y saber dónde es notepad.exe (o que es visible en PATH):

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

Apache common-exec es una buena biblioteca para el manejo de la ejecución del proceso externo.

ACTUALIZACIÓN: Una respuesta más completa a su pregunta se puede encontrar here

20

Trate

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

Asegúrese de que el archivo existe. Gracias a Andreas_D quien señaló esto.

+0

Es posible que desee agregar detalles sobre la versión requerida de Java para que esto funcione. –

+1

Oye, no lo sabía. guay. Pero - la segunda línea tiene que leer 'Desktop.getDesktop(). Edit (archivo);'. Y el archivo debe ser creado, de lo contrario se quejará con una 'IllegalArgumentException'. –

+0

Gracias @Andreas, lo arregló. Asegurarse de que el archivo exista es parte del trabajo de guilgamos :) Buena captura de todos modos, +1 – whiskeysierra

2

En IDE (Eclipse), se trata de "C: \ path \ to \ notepad.exe C: \ path \ to \ file.txt". Así que he utilizado lo siguiente que funciona para mí, manteniéndome feliz a mí y a mi IDE: o) Espero que esto ayude a otros por ahí.

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

(si quiere enviar un bloc de notas para abrir "miarchivo.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

Usted podría hacer de este el mejor si se inicia el bloc de notas en línea de comandos con el comando: iniciar el bloc de notas

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

Guardar conjunto de comandos de cuerda y darle al igual que en parametr ejecutivo

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