如果我在java中使用Desktop API打开了一个文本文件,我想仅使用代码再次关闭它? 我已经像这样打开了它
Desktop d=Desktop.getDesktop();
try {
d.open(new File("C:/Users/home/Desktop/123.txt"));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Thread.sleep(2000);
现在我要关闭它?我将如何做,我必须写什么代码,因为java的Desktop API中没有方法
答案 0 :(得分:2)
Desktop#open()
告诉操作系统使用其文件类型映射来选择并启动给定文件的相应应用程序。除非该应用程序本身提供了一个可以控制它的API,否则无法关闭它。桌面API不会保留与启动的应用程序的连接。
在任何情况下,由于Java API不返回已启动应用程序的进程ID,因此即使找到该进程也会出现问题。
答案 1 :(得分:1)
这取决于打开txt文件的默认应用程序是什么。一般在窗口它的记事本。如果是这种情况,您可以尝试
Desktop d=Desktop.getDesktop();
try {
d.open(new File("test.txt"));
Thread.sleep(5000);
Runtime.getRuntime().exec("taskkill /IM notepad.exe");
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
这个问题是关闭所有打开的记事本实例:(
答案 2 :(得分:1)
在API:
启动关联的应用程序以打开文件。
如果指定的文件是目录,则为当前的文件管理器 推出平台打开它。
这意味着您无法关闭Desktop
课程中的文件。这是您可能想要查看的related question。如果您担心像使用流一样关闭文件,那么您就可以了(因为这不是您需要保存工作的流)。
如果你想仍然关闭文件,你需要通过进程列表(how to do that for Windows)和一些如何识别你刚刚打开文件的应用程序,然后用OS关闭它命令。
此外,做这样的事情的问题是:
Runtime.getRuntime().exec("taskkill /IM notepad.exe");
它只适用于Windows平台(check this out)。如果你想这样做,你必须确切知道每种情况下它是什么应用程序,你必须为每个不同的操作系统做不同的事情:
System.getProperty("os.name")