将文件从一个目录移动到另一个目录,并使用java从源目录中删除

时间:2015-12-30 06:02:07

标签: java file java-io

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

def reverse_dummy(df_dummies):
    pos = defaultdict(list)
    vals = defaultdict(list)

    for i, c in enumerate(df_dummies.columns):
        if "_" in c:
            k, v = c.split("_", 1)
            pos[k].append(i)
            vals[k].append(v)
        else:
            pos["_"].append(i)

    df = pd.DataFrame({k: pd.Categorical.from_codes(
                              np.argmax(df_dummies.iloc[:, pos[k]].values, axis=1),
                              vals[k])
                      for k in vals})

    df[df_dummies.columns[pos["_"]]] = df_dummies.iloc[:, pos["_"]]
    return df

In [31]: reverse_dummy(df_dummies)
Out[31]:
    m   qj  Budget
0  M1  q23      39
1  M2   q4      15
2  M7   q9      13
3  M1  q23      53
4  M2  q23      82
5  M1   q9      70

该程序适用于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系统中,所有文件都被移动但无法从源目录中删除一个或两个文件。请注意,调试程序时工作正常。

4 个答案:

答案 0 :(得分:0)

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

  

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

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

答案 1 :(得分:0)

因此,如果问题伴随删除,可能的解释:

  • 在每个文件和目录上执行file.delete()。你怎么知道这个目录是空的?如果没有,它会失败,然后下一个指令会发生什么?

  • 文件删除与操作系统有关。在Windows上,您可能会遇到许多安全问题,具体取决于哪个用户,哪些权限,哪个位置。您应该检查文件删除程序;

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

答案 2 :(得分:0)

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

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

您可以尝试以下方式,

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

如果它也没有用,那么你可以在删除文件之前调用System.gc();

答案 3 :(得分:0)

如果源和目标位于同一文件系统中,则不需要任何此类操作。只需使用File.renameTo()