2010-08-15 32 views
7

Tôi muốn mở Notepad trong chương trình Java của mình. Giả sử rằng tôi có một nút nếu tôi nhấp vào nút này, sổ ghi chú sẽ xuất hiện. Tôi đã có tên tệp và thư mục.Làm thế nào để mở tập tin notepad trong java?

Tôi làm cách nào để triển khai trường hợp này?

+3

Chính xác bạn muốn nói gì bởi 'notepad'? Một chương trình chỉnh sửa văn bản crappy được sử dụng trên Windows, hoặc một điều khiển TextArea?Tha thứ cho tôi vì đã giả định "mọi thứ", nhưng có vẻ như bạn không biết những điều cơ bản về Swing/AWT. – aviraldg

+1

... bạn có muốn mở chương trình notepad hoặc tệp văn bản mà bạn đã tạo trong notepad không? – Stephen

Trả lời

6

Giả sử bạn muốn khởi chạy chương trình cửa sổ notepad.exe, bạn đang tìm kiếm chức năng exec. Có thể bạn muốn gọi cái gì đó như:

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

Ví dụ, trên notepad máy của tôi nằm ở C:\Windows\notepad.exe:

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

này sẽ mở notepad với các tập tin test.txt mở để chỉnh sửa.

Lưu ý bạn cũng có thể chỉ định tham số thứ ba cho exec là thư mục hoạt động để thực thi - do đó, bạn có thể khởi chạy tệp văn bản được lưu trữ tương đối với thư mục làm việc của chương trình.

2

Sử dụng SWT, bạn có thể khởi chạy bất kỳ Nếu bạn muốn mô phỏng nhấp đúp vào văn bản trong cửa sổ, không thể chỉ với một JRE thuần túy. Bạn có thể sử dụng một thư viện bản địa như SWT và sử dụng đoạn mã sau để mở một tập tin:

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

Nếu bạn không muốn sử dụng một lib của bên thứ ba, bạn nên biết và bạn biết nơi notepad.exe là (hoặc hiển thị trong PATH):

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

Apache common-exec là thư viện tốt để xử lý quá trình thực thi bên ngoài.

UPDATE: Một câu trả lời hoàn chỉnh hơn cho câu hỏi của bạn có thể được tìm thấy here

20

Hãy thử

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

Đảm bảo rằng tệp tồn tại. Nhờ Andreas_D đã chỉ ra điều này.

+0

Bạn có thể muốn thêm chi tiết về phiên bản Java cần thiết để hoạt động. –

+1

Hey, không biết điều đó. mát mẻ. Nhưng - dòng thứ hai phải đọc 'Desktop.getDesktop(). Edit (file);'. Và tệp phải được tạo, nếu không nó sẽ khiếu nại với 'IllegalArgumentException'. –

+0

Cảm ơn @Andreas, đã sửa nó. Đảm bảo tệp tồn tại là một phần trong công việc của guilgamos :) Dù sao thì bắt tốt, +1 – whiskeysierra

2

Trong IDE (Eclipse) nó chứa về "C: \ path \ to \ notepad.exe C: \ path \ to \ file.txt". Vì vậy, tôi đã sử dụng những điều sau đây làm việc cho tôi giữ cho tôi và IDE của tôi hạnh phúc: o) Hy vọng rằng điều này sẽ giúp những người khác ngoài kia.

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

(giả sử bạn muốn notepad để mở "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

Bạn có thể làm điều này là tốt nhất nếu bạn bắt đầu notepad trong dòng lệnh với lệnh: start notepad

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

Lưu mảng chuỗi lệnh và cho nó như parametr trong exec

Process runtimeProcess = Runtime.getRuntime().exec(startNotepadAdmin2); 
runtimeProcess.waitFor(); 
Các vấn đề liên quan