[英]Not able to Close and delete already opened .xls file thro' java code
我正在尝试通过Java代码删除目录,现在的用例是:如果文件已经打开,则应首先将其关闭,然后我可以直接删除目录。
我试图使用FileoutputStream关闭文件,但无法创建FileoutputStream对象,它显示错误,例如“该进程无法访问该文件,因为该文件正在被另一个进程使用”
还有另一种方法可以帮助我吗?
如果您要删除的文件已由Java应用程序使用Runtime.getRuntime()。exec()方法或任何其他方式打开,则必须先关闭该文件,然后才能执行任务。 当然,由于该文件已打开,因此您也无法删除该文件的主文件夹(目录),因此需要首先关闭该文件。 这是完全有意义的操作系统保护措施,为什么我们要删除其他人正在使用的内容?
为了关闭文件,您将需要知道正在使用该文件的进程的名称,例如,如果已使用MS Windows NotePad.exe打开了名为MyText.txt的文本文件,则必须关闭该文件 。使文件MyText.txt保持打开状态。
下面,我提供了一种简单的方法,只要您提供正确的进程名称,它就可以为您关闭一个开放的外部进程。 在上面的示例中,这将是“ Notepad.exe”
public static void killProcess(String processName) {
// PLEASE NOTE: This method will currently Kill "ALL"
// open processes of the supplied process
// name unless commented code changes are
// made.
try {
Runtime rt = Runtime.getRuntime();
// For Windows OS...
if (System.getProperty("os.name").toLowerCase().contains("windows")) {
rt.exec("taskkill /T /F /IM " + processName);
//rt.exec("taskkill /T /F /PID " + Long.parseLong(processName)); // Supply the PID value as string
//rt.exec("taskkill /F /FI \"WINDOWTITLE eq " + processName + "\" /T"); // Supply the window title bar text.
// If you want to kill only a single instance of the
// named process then get its PID value and use:
// "taskkill /T /F /PID PID_Value" OR you can provide
// the window title and use:
// "taskkill /F /FI \"WINDOWTITLE eq " + processName + "\" /T"
}
// For OSX And Linux OS's...
else {
rt.exec("sudo killall -9 '" + processName + "'");
//rt.exec("kill -9 " + Long.parseLong(processName)); // Supply the PID value as string
// If you want to kill only a single instance of the
// named process then get its PID value and use:
// "kill -9 PID_Value"
}
rt.freeMemory();
}
catch (IOException | SecurityException | IllegalArgumentException ex) {
ex.printStackTrace();
}
}
在此方法代码开头的注释状态中,将终止所有当前正在运行且具有提供的进程名称的进程。 如果您只想终止某个进程的特定实例,例如上面的示例,并且您有四个Notepad.exe实例可以打开来编辑其他文本文件,那么您需要将方法代码更改为:
rt.exec("taskkill /F /FI \"WINDOWTITLE eq " + processName + "\" /T");
代替这个:
rt.exec("taskkill /T /F /IM " + processName);
当然,您可以将此方法称为:
killProcess("MyText.txt - Notepad");
您在其中提供应用程序的窗口标题栏中的内容。 一旦上述方法完成,您就可以删除MyText.txt文件及其所在的文件夹,因为它不再被使用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.