无法删除Java中的文件,因为它在Java Platform SE二进制文件中打开

5

我在Windows上有三个文件夹A、B和C。我有一个文件存在于文件夹A中。我想执行以下任务:

  1. 将它复制到文件夹B
  2. 从文件夹A中删除它(此操作已经成功,因为该文件没有被任何进程占用)
  3. 将它复制到文件夹C
  4. 从文件夹B中删除它(此操作未成功)

步骤1、2、3可以正常工作,但步骤4无法正常工作。该文件存在且可写入、读取、执行。当我打开Windows资源管理器并尝试手动删除文件夹B中的文件时,它显示无法完成操作,因为该文件在Java平台SE二进制文件中打开。下面是我的复制文件代码:

        FileInputStream in = new FileInputStream(source);
        FileOutputStream out = new FileOutputStream(dest);

        byte[] buf = new byte[1024];
        int len;

        while ((len = in.read(buf)) > 0) {
            out.write(buf, 0, len);
        }

        in.close();
        out.close();

我正在使用Java 6。你知道我如何完成第四步吗?


2
如果你在最后一步删除它,将其复制到目录B的意义是什么? - Josh M
看看这个: https://dev59.com/83NA5IYBdhLWcg3wWsiK - kol
如果A、B和C都在同一文件系统中,为什么不使用重命名而不是其中一个复制步骤呢? - user207421
我必须对这个文件做一些处理,因此我必须将它复制到B目录。 我之前尝试过重命名,但也没有起作用。 - Andy
3个回答

1

1
我仍然无法删除b,因为Java SE仍然在占用它。 - Andy

0
尝试这样做:

代码

       public void foo(){
        File afile =new File("A\\Afile.txt");
        File bfile =new File("B\\Bfile.txt");
        InputStream  inStream = new FileInputStream(afile);
        OutputStream outStream = new FileOutputStream(bfile);

        byte[] buffer = new byte[1024];

        int length;
        //copy the file content in bytes 
        while ((length = inStream.read(buffer)) > 0){

            outStream.write(buffer, 0, length);

        }

        inStream.close();
        outStream.close();

        System.out.println("File Copied");
        if(afile.delete()){
            System.out.println(file.getName() + " deleted!");
        }else{
            System.out.println("Delete failed.");
        }
      }

请确保您使用适当的try和catch语句。

2
我仍然无法删除aFile,因为它被Java SE二进制进程占用。 - Andy

-1

如果您知道如何打开Windows任务管理器,请打开它并单击进程,然后单击顶部的描述一词,然后滚动并查找JAVA一词,然后右键单击它并单击结束进程树。完成后,关闭Windows任务管理器并返回到文件资源管理器,然后返回到Java文件并删除它或打开它以删除文件中想要删除的内容。希望这能解决您的问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接