4

我在 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。你知道如何完成第 4 步吗?

4

3 回答 3

1

为什么不使用像 Apache Commons IO (FileUtils) 这样的库?

http://commons.apache.org/proper/commons-io/apidocs/org/apache/commons/io/FileUtils.html

File a = new File("A/file.txt");
File b = new File("B/file.txt");
File c = new File("C/file.txt");
FileUtils.copyFile(a, b);
a.delete();
FileUtils.copyFile(b, c);
b.delete();
于 2013-10-12T00:52:02.440 回答
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 子句

于 2013-10-12T00:53:09.513 回答
-1

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

于 2020-07-14T23:16:36.320 回答