Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法通过';关闭和删除已打开的.xls文件;java代码_Java_File - Fatal编程技术网

无法通过';关闭和删除已打开的.xls文件;java代码

无法通过';关闭和删除已打开的.xls文件;java代码,java,file,Java,File,我正试图用java代码删除目录, 现在 用例是: 如果文件已经打开,那么它应该先关闭它,然后我可以直接删除该目录 我试图使用FileoutputStream关闭文件,但无法使FileoutputStream的对象显示错误,如 “该进程无法访问该文件,因为其他进程正在使用该文件” 还有其他方法可以帮助我吗?如果您要删除的文件已由Java应用程序使用Runtime.getRuntime().exec()方法或任何其他方法打开,则必须先关闭该文件,然后才能执行任务。当然,由于文件是打开的,您也不能删除

我正试图用java代码删除目录, 现在 用例是: 如果文件已经打开,那么它应该先关闭它,然后我可以直接删除该目录

我试图使用FileoutputStream关闭文件,但无法使FileoutputStream的对象显示错误,如 “该进程无法访问该文件,因为其他进程正在使用该文件”


还有其他方法可以帮助我吗?

如果您要删除的文件已由Java应用程序使用Runtime.getRuntime().exec()方法或任何其他方法打开,则必须先关闭该文件,然后才能执行任务。当然,由于文件是打开的,您也不能删除该文件的主文件夹(目录),因此需要先关闭该文件。这是一个完全有意义的操作系统保护,为什么我们要删除其他人正在使用的东西

要关闭文件,您需要知道正在使用该文件的进程的名称,例如,如果名为MyText.txt的文本文件已使用MS Windows NotePad.exe打开,则必须关闭保存该文件的NotePad.exe进程

下面我提供了一个简单的方法,只要您提供正确的进程名称,就可以为您关闭一个打开的外部进程。根据我们上面的示例,这将是“Notepad.exe”

正如此方法代码开头的注释所述,所提供进程名称的所有当前正在运行的进程将被终止。如果您只想终止一个进程的特定实例,例如上面的示例,并且您有四个Notepad.exe的其他实例打开编辑其他文本文件,那么您需要将方法代码更改为:

rt.exec("taskkill /F /FI \"WINDOWTITLE eq " + processName + "\" /T");
与此相反:

rt.exec("taskkill /T /F /IM " + processName);
当然你会这样称呼这个方法:

killProcess("MyText.txt - Notepad");

提供应用程序窗口标题栏中的内容。完成上述方法后,您可以删除MyText.txt文件及其所在的文件夹,因为它不再被使用。

如果您要删除的文件已由Java应用程序打开,可能使用了Runtime.getRuntime().exec()方法或任何其他方法,则必须先关闭该文件,然后才能执行任务。当然,由于文件是打开的,您也不能删除该文件的主文件夹(目录),因此需要先关闭该文件。这是一个完全有意义的操作系统保护,为什么我们要删除其他人正在使用的东西

要关闭文件,您需要知道正在使用该文件的进程的名称,例如,如果名为MyText.txt的文本文件已使用MS Windows NotePad.exe打开,则必须关闭保存该文件的NotePad.exe进程

下面我提供了一个简单的方法,只要您提供正确的进程名称,就可以为您关闭一个打开的外部进程。根据我们上面的示例,这将是“Notepad.exe”

正如此方法代码开头的注释所述,所提供进程名称的所有当前正在运行的进程将被终止。如果您只想终止一个进程的特定实例,例如上面的示例,并且您有四个Notepad.exe的其他实例打开编辑其他文本文件,那么您需要将方法代码更改为:

rt.exec("taskkill /F /FI \"WINDOWTITLE eq " + processName + "\" /T");
与此相反:

rt.exec("taskkill /T /F /IM " + processName);
当然你会这样称呼这个方法:

killProcess("MyText.txt - Notepad");

提供应用程序窗口标题栏中的内容。一旦上述方法完成,您就可以删除MyText.txt文件及其所在的文件夹,因为它不再被使用。

添加您的代码段,否-如果另一个进程打开了文件(在Windows上,这是您的平台,因为Linux不关心另一个进程是否打开了文件)那么您就不能从Java中对此做任何事情。您需要使用特定于Windows的工具来确定哪个进程打开了该进程,并在需要时自动关闭该进程。这种方法不起作用。您正试图打开一个新的文件句柄,您将只能关闭该句柄。现有文件句柄仍保持打开状态。该文件是否由您自己的Java应用程序打开并试图关闭该文件?@DevilsHnd No。该文件是手动打开的,需要通过my Java code关闭以删除父文件夹添加您的代码段,否-如果其他进程打开了文件(在Windows上,这是您的平台,因为Linux不关心其他进程是否打开了文件)然后,您无法通过Java对此执行任何操作。您需要使用特定于Windows的工具来确定哪个进程打开了该进程,并在需要时自动关闭该进程。这种方法将不起作用。您正在尝试打开一个新的文件句柄,并且只能关闭该句柄。现有的文件句柄仍然保持打开状态。file由您自己的Java应用程序打开,该应用程序正在尝试关闭该文件?@DevilsHnd No.文件是手动打开的,需要通过我的Java代码关闭以删除父文件夹实际上,用例是我正在创建一个文件夹结构,在其中我正在尝试创建excel文件。当用户再次尝试运行代码时,然后必须删除以前的文件夹。但是如果用户已经打开了一些Excel,那么我们无法删除现有目录,我们无法通过代码关闭文件。我们应该先警告用户关闭文件。然后让用户完成关闭工作