2010-08-15 2 views
7

Я хочу открыть Блокнот в своей программе на Java. Предположим, что у меня есть одна кнопка, если я нажму на эту кнопку, появится блокнот. У меня уже есть имя файла и каталог.Как открыть файл блокнота в java?

Как я могу реализовать этот случай?

+3

Что именно вы подразумеваете под «записной книжкой»? Программа дерьмового редактирования текста, используемая в Windows, или элемент управления TextArea?Простите меня за то, что я принимаю «вещи», но похоже, что вы не знаете основ Swing/AWT. – aviraldg

+1

... вы хотите открыть программу блокнота или текстовый файл, который вы создали в блокноте? – Stephen

ответ

6

Предполагая, что вы хотите запустить программу windows notepad.exe, вы ищете функцию exec. Вы, наверное, хотите назвать что-то вроде:

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

К примеру, на моей машине блокнота находится в C:\Windows\notepad.exe:

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

Откроется блокнот с файлом test.txt открыть для редактирования.

Обратите внимание, что вы также можете указать третий параметр: exec, который является рабочим каталогом для запуска, поэтому вы можете запустить текстовый файл, который хранится относительно рабочего каталога вашей программы.

2

Используя SWT, вы можете запустить любой Если вы хотите эмулировать двойной щелчок по тексту в окнах, это невозможно только при использовании простой JRE. Вы можете использовать встроенную библиотеку как SWT и использовать следующий код, чтобы открыть файл:

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

Если вы не хотите использовать сторонний LIB, вы должны знать, и вы знаете, где notepad.exe является (или это видно в PATH):

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

Apache common-exec хорошая библиотека для обработки внешнего исполнения процесса.

UPDATE: Более полный ответ на ваш вопрос может быть найден here

20

Попробуйте

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

Убедитесь, что файл существует. Спасибо Андреасу, который указал на это.

+0

Возможно, вы захотите добавить подробную информацию о требуемой версии Java для этого. –

+1

Эй, не знал этого. круто. Но - вторая строка должна читать «Desktop.getDesktop(). Edit (file);'. И файл должен быть создан, иначе он будет жаловаться на 'IllegalArgumentException'. –

+0

Спасибо @ Andreas, исправил его. Убедитесь, что файл существует, является частью задания guilgamos :) Хорошо поймать в любом случае, +1 – whiskeysierra

2

В IDE (Eclipse) он комментирует «C: \ path \ to \ notepad.exe C: \ path \ to \ file.txt». Итак, я использовал следующее, которое работает для меня, поддерживая меня и мою среду IDE: o) Надеюсь, это поможет другим.

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

(если вы хотите, чтобы открыть блокнот «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

Вы могли бы сделать это лучше, если вы начнете блокнот в командной строке с помощью команды: запуск блокнота

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

Сохранить массив строковых команд и дать ему как Parametr в Exec

Process runtimeProcess = Runtime.getRuntime().exec(startNotepadAdmin2); 
runtimeProcess.waitFor(); 
Смежные вопросы