【问题标题】:Moving file from one directory to another and delete from source directory using java使用java将文件从一个目录移动到另一个目录并从源目录中删除
【发布时间】:2015-12-30 06:02:07
【问题描述】:

我正在尝试将文件从一个目录移动到另一个目录,在移动后从源目录中删除该文件。

for (File file : files) {
    if (file != null) {
        boolean status = moveFile(file, filePath, name, docGroupId);
        if (status) {
            //some operations....
        }
    }
}
public static boolean moveFile(final File file, final String filePath, final String groupName, Integer docGroupId) {
    // TODO Auto-generated method stub
    String selectedDirectory = filePath + File.separator + groupName;
    InputStream in = null;
    OutputStream out = null;
    try {
        if (!file.isDirectory()) {
            File dir = new File(selectedDirectory);
            if (!dir.exists()) {
                dir.mkdirs();
            }
            String newFilString = dir.getAbsolutePath() + 
                                  File.separator + file.getName();
            File newFile = new File(newFilString);
            in = new FileInputStream(file);
            out = new FileOutputStream(newFile);
            byte[] moveBuff = new byte[1024];
            int butesRead;
            while ((butesRead = in.read(moveBuff)) > 0) {
                out.write(moveBuff, 0, butesRead);
            }
        }
        in.close();
        out.close();
        if(file.delete())
            return true;        
        } catch (Exception e) {
            return false;
        }
    }

程序在Linux-Ubuntu 上运行,所有文件都被移动到另一个目录并从源目录中删除,但在Windows 系统中,所有文件都被移动但未能从源目录中删除一两个文件。请注意,在调试程序时运行正常。

【问题讨论】:

  • 使用可以使用apache io函数org.apache.commons.io.FileUtils.moveDirectory(srcDir, destDir);
  • 有什么错误吗?你应该在 catch 块中打印异常
  • 我不想移动目录中的所有文件。只移动选定的文件
  • 然后使用moveFile函数或者moveFileToDirectory(srcFile, destDir, createDestDir);
  • 您正在吃掉异常,在 catch 块中没有记录/打印任何内容。你怎么确定你没有收到任何错误

标签: java file java-io


【解决方案1】:

考虑使用Files.delete 而不是 File.delete。 javadoc 说:

请注意,Files 类定义了 delete 方法以在无法删除文件时抛出 IOException。这对于错误报告和诊断无法删除文件的原因很有用。

这应该提供诊断问题所需的信息。

【讨论】:

    【解决方案2】:

    所以,如果删除问题,可能的解释:

    • 您对每个文件和目录执行 file.delete()。你怎么知道目录是空的?如果没有,它会失败,那么接下来的指令会发生什么?

    • 文件删除取决于操作系统。在 Windows 上,您可能会遇到许多安全问题,具体取决于用户、权限和位置。您应该使用文件删除单独程序进行检查;

    • 最后:文件可以被其他程序(甚至资源管理器)锁定,它也依赖于操作系统。

    【讨论】:

      【解决方案3】:

      在尝试删除/重命名任何文件之前,您必须确保所有读取器或写入器(例如:BufferedReader/InputStreamReader/BufferedWriter)已正确关闭。同时请检查文件的权限

      file.canRead(), file.canWrite(), file.canExecute().
      

      你可以尝试如下,

      file.setWritable(true);
      file.delete();
      

      如果它也不起作用,那么您可以在删除文件之前致电System.gc();

      【讨论】:

        【解决方案4】:

        如果源和目标在同一个文件系统中,则不需要任何这些。只需使用File.renameTo()

        【讨论】:

          猜你喜欢
          • 2014-04-16
          • 2017-07-20
          • 1970-01-01
          • 2021-01-22
          • 1970-01-01
          • 1970-01-01
          • 2023-04-07
          • 2019-09-26
          • 1970-01-01
          相关资源
          最近更新 更多