나는 나의 서블릿 (output.txt
)에서와 XSL 파일 (폴더 generatedApps
과 컨텐츠) 다음 ZIP 아카이브에 XSL 변환에 의해 생성 된 파일과 폴더를 팩에서 일부 파일을 생성하고있다. 클라이언트가 ZIP 아카이브를 다운로드 한 후에 다른 파일 및 폴더뿐만 아니라 삭제하려고합니다. (BTW, 아카이브 내부에왜 일부 파일 및 폴더 만 삭제되지 않습니까?
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 압축 파일이 삭제된다는 점이다 :
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
은 다음과 같다 :
이
내 코드입니다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()
. 그래도 작동이 안되는.
... – jamp
문제는도 (삭제를 추가하여 –
시작 폴더 내부에서 내 파일을 삭제하지 않는다는 것입니다) 폴더가 비어있는 경우 질문에 코드를 수정하고 계속 진행하십시오. :) 또한 delete()가 'true'를 반환하는지 확인하십시오. – jamp