gpt4 book ai didi

java - 当文件是参数时无法删除它

转载 作者:行者123 更新时间:2023-12-01 14:17:23 26 4
gpt4 key购买 nike

我将把我的代码放在第一位:

@Post
public Representation post(InputStream zip) throws Throwable {
createFile(zip, "C:/temp\abc.zip");
return new StringRepresentation("File uploaded");
}

public void createFile(InputStream zipStream, uploadedFileLocation) throws Exception {
try {
writeToFile(zipStream, uploadedFileLocation);
FileUtils.forceDelete(new File(uploadedFileLocation));
} catch (Exception e) {
throw e;
}
}


private void writeToFile(InputStream uploadedInputStream, String uploadedFileLocation) {
try {
OutputStream out = new FileOutputStream(new File(uploadedFileLocation));
int read = 0;
byte[] bytes = new byte[1024];

out = new FileOutputStream(new File(uploadedFileLocation));
while ((read = uploadedInputStream.read(bytes)) != -1) {
out.write(bytes, 0, read);
}
out.flush();
out.close();
uploadedInputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}

我正在尝试制作一个允许用户上传 zip 文件的服务器。然后,服务器将 zip 文件写入磁盘,将其解压缩,然后删除该 zip 文件,同时将解压缩的部分保留在服务器上。但是,当我将 zip 文件发送到我的服务器时,它无法被删除。当使用FileUtils.forceDelete()时,它说它无法删除该文件。最好是解压后将 zip 删除。

编辑:我只能在 post(InputStream zip) 返回后删除该文件。如果我从 post 方法中调用删除,它不会删除,因为 post 尚未返回。有办法解决这个问题吗?

最佳答案

<罢工>嗯。您似乎正在尝试删除目录?

FileUtils.forceDelete(new File(uploadedFileLocation));

但是 uploadedFileLocation 是您的 post 方法中的“C:\temp”。我不确定这是否会导致问题,或者这是否是预期行为,但该代码不会删除 zip 文件,而是尝试删除实际的 C:\temp 目录。

此外,可能值得注意的是:在您的 writeToFile 方法中,您初始化了 OutputStream out 两次。我并不是 100% 同意这一点,但可能是第一次初始化使文件指针保持打开状态,直到整个对象从堆栈中删除(即,当 post 返回时)。拿出第二次初始化看看有没有变化?

关于java - 当文件是参数时无法删除它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17996895/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com