gpt4 book ai didi

java - 为什么只有部分文件和文件夹没有被删除?

转载 作者:行者123 更新时间:2023-11-30 08:22:29 25 4
gpt4 key购买 nike

我正在从我的 servlet (output.txt) 和 XSL 文件(文件夹 generatedApps 及其内容)生成一些文件,然后打包这些文件和文件夹由 XSL 转换生成的 ZIP 存档。客户端下载 ZIP 存档后,我想删除它,以及其他文件和文件夹。

这是我的代码:

InputStream inputStream = new ByteArrayInputStream(request.getParameter("content")
.getBytes("UTF-8"));
try {
TransformerFactory tFactory = new net.sf.saxon.TransformerFactoryImpl();
Transformer transformer = tFactory.newTransformer(new StreamSource(
getServletContext().getResourceAsStream("lib/GenerateGeddyJsCode.xsl")));
FileOutputStream fos = new FileOutputStream("output.txt");
transformer.transform(new StreamSource(inputStream), new StreamResult(fos));

String appName = new Scanner(new File("output.txt")).useDelimiter("\\Z").next();

ZipUsingJavaUtil zipper = new ZipUsingJavaUtil();
zipper.zipFiles("generatedApps/" + appName, "generatedApps/" + appName + "Archive.zip");

String path = "generatedApps/";
String fileName = appName + "Archive.zip";
File f = new File(path + fileName);

response.setContentType("application/zip");
response.setContentLength((int)f.length());
response.addHeader("Content-Disposition","attachment;filename=\"" + fileName + "\"");
byte[] arBytes = new byte[32768];
FileInputStream is = new FileInputStream(f);
ServletOutputStream op = response.getOutputStream();
int count;
while ((count = is.read(arBytes)) > 0)
{
op.write(arBytes, 0, count);
}
op.flush();
op.close();
is.close();
fos.close();
inputStream.close();

File toBeDel = new File("generatedApps/");
GenerateGeddyJsCode.removeDirectory(toBeDel);

File output = new File("output.txt");
output.delete();

removeDirectory 方法如下:

public static void removeDirectory(File dir) {
if (dir.isDirectory()) {
File[] files = dir.listFiles();
if (files != null && files.length > 0) {
for (File aFile : files) {
removeDirectory(aFile);
}
}
} else {
dir.delete();
}
}

问题是最后只有 ZIP 存档被删除(顺便说一句,存档在 generatedApps 中)。我试图关闭所有流,因为我读过未关闭的流会阻止删除。

我怎样才能同时删除剩余的文件和文件夹?

==================================== 编辑 ======= =================================

我更新的删除方法:

public static void removeDirectory(File dir) {
if (dir.isDirectory()) {
File[] files = dir.listFiles();
if (files != null && files.length > 0) {
for (File aFile : files) {
removeDirectory(aFile);
}
} else if (files.length == 0) {
dir.delete();
}

}
dir.delete();

}

还是不行。

==================================== 编辑 2====== ==================================添加:

InputStream inStream = getServletContext().getResourceAsStream("lib/GenerateGeddyJsCode.xsl");
StreamSource inStreamSource = new StreamSource(inStream);
Transformer transformer = tFactory.newTransformer(inStreamSource);

及之后的 inStream.close()。还是不行。

最佳答案

您可以检查 Zip 实用程序是否正确关闭文件...您有权访问 ZipUsingJavaUtil 类源代码吗?

  • zip 文件中的每个条目都必须关闭。
  • 为 zip 写入过程打开的每个文件输入流都应该是关闭。

检查以下示例: http://www.journaldev.com/957/java-zip-example-to-zip-single-file-and-a-directory-recursively

关于java - 为什么只有部分文件和文件夹没有被删除?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24340973/

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