我正在尝试将文件从一个目录移动到另一个目录,然后在移动后从源目录中删除该文件。
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
系统中,所有文件都被移动但无法从源目录中删除一个或两个文件。请注意,调试程序时工作正常。
答案 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()
。