一个web的应用,在Jsp页面中选取本地的文件,然后点击删除,删除成功的话返回页面,显示该文件的文件路径和文件名。
我的程序编译和运行,没有任何问题,但是就是无法实现删除功能,虽然io.file.delete()方法返回的是ture,但是文件依然存在……请大家帮我看下该怎么解决这个问题,谢谢
代码如下,总共3个类:package jbxstruts;
import commonlib.*;
import org.apache.struts.action.ActionForm;
import org.apache.struts.upload.FormFile;
import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionMapping;
import javax.servlet.http.HttpServletRequest;public class DeleteActionForm extends ActionForm
{
private FormFile file;
private String fname;
private String size;
private String deleteFileDir;
public FormFile getFile() {
return file;
} public void setFile(FormFile file) {
this.file = file;
} public void setFname(String fname)
{
this.fname = fname;
} public String getFname()
{
return this.fname;
} public void setSize(String size)
{
this.size = size;
} public String getSize()
{
return this.size;
} public String getDeleteFileDir()
{
//this.deleteFileDir = deleteFileDir;
return this.deleteFileDir;
} public void setDeleteFileDir(String deleteFileDir)
{
this.deleteFileDir = deleteFileDir;
// return deleteFileDir;
} public ActionErrors validate(ActionMapping actionMapping,
HttpServletRequest httpServletRequest) {
/** @todo: finish this method, this is just the skeleton.*/
return null;
} public void reset(ActionMapping actionMapping,
HttpServletRequest servletRequest) {
}
}package jbxstruts;import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionForm;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.Action;
import commonlib.FileDelete;public class DeleteAction extends Action {
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request,
HttpServletResponse response) {
DeleteActionForm _deleteActionForm = (DeleteActionForm) form;
//(this.servlet.getServletContext().getRealPath("/upLoadFile"))
_deleteActionForm.setDeleteFileDir(this.servlet.getServletContext().getRealPath(""));//上传的文件保存的目录
//_deleteActionForm.setDeleteFileDir(request.getSession().getServletContext().getRealPath("/uploadFlie"));
//_deleteActionForm.setDeleteFileDir(request.getContextPath());
FileDelete _fileDelete = new FileDelete(); if(_fileDelete.dowork(_deleteActionForm) == false)
{
return mapping.findForward("DeleteFailure");
}
return mapping.findForward("DeleteSuccess"); // throw new java.lang.UnsupportedOperationException(
// "Method $execute() not yet implemented.");
}
}package commonlib;import jbxstruts.*;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionForm;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.Action;
import java.io.*;
import javax.servlet.http.*;
import org.apache.struts.upload.FormFile;
import org.apache.struts.upload.DiskFile;
import java.io.File;public class FileDelete {
public FileDelete() {
} public Boolean dowork(ActionForm form)
{ DeleteActionForm _deleteActionForm = (DeleteActionForm) form;
FormFile deleteFile = _deleteActionForm.getFile();
//DiskFile deleteFile=new DiskFile("") ;
if (deleteFile == null) {
return false;
} String fileName = deleteFile.getFileName();
String fileSize = Integer.toString(deleteFile.getFileSize()) + " bytes"; try { File _file=new File(_deleteActionForm.getDeleteFileDir(), fileName);
//File _file=new File("D:\\", fileName);
InputStream streamIn = deleteFile.getInputStream();
System.out.println("inputStream");
//OutputStream streamOut = new FileOutputStream(_deleteActionForm.getDeleteFileDir()) ;
System.out.println("outputStream");
if(_file.exists())
{
System.gc();
_file.delete();
} //streamOut.close();
streamIn.close();
_deleteActionForm.setFname(_deleteActionForm.getDeleteFileDir() + "\\"+fileName);
_deleteActionForm.setSize(fileSize);
deleteFile.destroy();
return true;
} catch (Exception e) {
e.toString();
return false;
}
}
}
我的程序编译和运行,没有任何问题,但是就是无法实现删除功能,虽然io.file.delete()方法返回的是ture,但是文件依然存在……请大家帮我看下该怎么解决这个问题,谢谢
代码如下,总共3个类:package jbxstruts;
import commonlib.*;
import org.apache.struts.action.ActionForm;
import org.apache.struts.upload.FormFile;
import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionMapping;
import javax.servlet.http.HttpServletRequest;public class DeleteActionForm extends ActionForm
{
private FormFile file;
private String fname;
private String size;
private String deleteFileDir;
public FormFile getFile() {
return file;
} public void setFile(FormFile file) {
this.file = file;
} public void setFname(String fname)
{
this.fname = fname;
} public String getFname()
{
return this.fname;
} public void setSize(String size)
{
this.size = size;
} public String getSize()
{
return this.size;
} public String getDeleteFileDir()
{
//this.deleteFileDir = deleteFileDir;
return this.deleteFileDir;
} public void setDeleteFileDir(String deleteFileDir)
{
this.deleteFileDir = deleteFileDir;
// return deleteFileDir;
} public ActionErrors validate(ActionMapping actionMapping,
HttpServletRequest httpServletRequest) {
/** @todo: finish this method, this is just the skeleton.*/
return null;
} public void reset(ActionMapping actionMapping,
HttpServletRequest servletRequest) {
}
}package jbxstruts;import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionForm;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.Action;
import commonlib.FileDelete;public class DeleteAction extends Action {
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request,
HttpServletResponse response) {
DeleteActionForm _deleteActionForm = (DeleteActionForm) form;
//(this.servlet.getServletContext().getRealPath("/upLoadFile"))
_deleteActionForm.setDeleteFileDir(this.servlet.getServletContext().getRealPath(""));//上传的文件保存的目录
//_deleteActionForm.setDeleteFileDir(request.getSession().getServletContext().getRealPath("/uploadFlie"));
//_deleteActionForm.setDeleteFileDir(request.getContextPath());
FileDelete _fileDelete = new FileDelete(); if(_fileDelete.dowork(_deleteActionForm) == false)
{
return mapping.findForward("DeleteFailure");
}
return mapping.findForward("DeleteSuccess"); // throw new java.lang.UnsupportedOperationException(
// "Method $execute() not yet implemented.");
}
}package commonlib;import jbxstruts.*;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionForm;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.Action;
import java.io.*;
import javax.servlet.http.*;
import org.apache.struts.upload.FormFile;
import org.apache.struts.upload.DiskFile;
import java.io.File;public class FileDelete {
public FileDelete() {
} public Boolean dowork(ActionForm form)
{ DeleteActionForm _deleteActionForm = (DeleteActionForm) form;
FormFile deleteFile = _deleteActionForm.getFile();
//DiskFile deleteFile=new DiskFile("") ;
if (deleteFile == null) {
return false;
} String fileName = deleteFile.getFileName();
String fileSize = Integer.toString(deleteFile.getFileSize()) + " bytes"; try { File _file=new File(_deleteActionForm.getDeleteFileDir(), fileName);
//File _file=new File("D:\\", fileName);
InputStream streamIn = deleteFile.getInputStream();
System.out.println("inputStream");
//OutputStream streamOut = new FileOutputStream(_deleteActionForm.getDeleteFileDir()) ;
System.out.println("outputStream");
if(_file.exists())
{
System.gc();
_file.delete();
} //streamOut.close();
streamIn.close();
_deleteActionForm.setFname(_deleteActionForm.getDeleteFileDir() + "\\"+fileName);
_deleteActionForm.setSize(fileSize);
deleteFile.destroy();
return true;
} catch (Exception e) {
e.toString();
return false;
}
}
}
在一般情况下,IE是不允许这样做的,要删除,也只能删除你虚拟目录下面的文件,其它硬盘上的文件是不能随便删除的。