rs=stam.executeQuery("select * from Adm where AdmId="+dljm.AdmId);
rs.next(); if(rs.getString(7)==null){//在数据库中,存放文件地址的字符串是否为空
stam.executeUpdate("update Adm set    AdmName='"+tf2.getText()+"',AdmSex='男',AdmTel='"+tf4.getText()+"',BuiId='"+tf3.getText()+"' where AdmId="+dljm.AdmId);
JOptionPane.showMessageDialog(null, "修改成功!!");
thiss.setEnabled(true);//thiss是主界面床过来的对象,不用理
this.dispose();
}else{//重点是这一块
String temp ="./pictures/"+tf2.getText()+".jpg";//创建新文件的文件地址 file = new File(rs.getString(7));//原文件
fis = new FileInputStream(file);
bis = new BufferedInputStream(fis);
fos = new FileOutputStream(temp);
bos = new BufferedOutputStream(fos);
int temp1=bis.read();
while(temp1!= -1){
bos.write(temp1);
temp1=bis.read();
}
fis.close();
fos.close();
bos.close();
bis.close();
file.delete();//这句总是删除不了原文件??
stam.executeUpdate("update Adm set AdmName='"+tf2.getText()+"',AdmSex='男',AdmTel='"+tf4.getText()+"',BuiId='"+tf3.getText()+"',AdmPtId='"+temp+"' where AdmId="+dljm.AdmId);
JOptionPane.showMessageDialog(null, "修改成功!!!");
thiss.setEnabled(true);
this.dispose();//一直都没问题,执行到了这里

解决方案 »

  1.   

    看看file.delete()的返回值是不是false
      

  2.   

    如果file内还有别的文件或者文件夹,你是删不掉的,要循环去删每个文件
      

  3.   

    file是一个指定的文件了,不是一个文件夹。是文件夹才删除不了。。还有file也不知道为什么返回false。
      

  4.   

    既然不是目录,一个单一的文件,而且流也都close了
    那就有可能是你在别的程序中打开了这个文件,比如记事本或者其他文本编辑器?
      

  5.   

    有些情况需要递归删除 ,  给你一个demo做参考
    public class FileDelete { /**  
     *  根据路径删除指定的目录或文件,无论存在与否  
     *@param sPath  要删除的目录或文件  
     *@return 删除成功返回 true,否则返回 false。  
     */  
    public static boolean deleteFolder(String sPath) {   
        boolean flag = false;   
        File file = new File(sPath);   
        // 判断目录或文件是否存在   
        if (!file.exists()) {  // 不存在返回 false   
            return flag;   
        } else {   
            // 判断是否为文件   
            if (file.isFile()) {  // 为文件时调用删除文件方法   
                return deleteFile(sPath);   
            } else {  // 为目录时调用删除目录方法   
                return deleteDirectory(sPath);   
            }   
        }   


    /**  
     * 删除单个文件  
     * @param   sPath    被删除文件的文件名  
     * @return 单个文件删除成功返回true,否则返回false  
     */  
    public static boolean deleteFile(String sPath) {   
        boolean flag = false;   
        File file = new File(sPath);   
        // 路径为文件且不为空则进行删除   
        if (file.isFile() && file.exists()) {   
            file.delete();   
            flag = true;   
        }   
        return flag;   
    }   /**  
     * 删除目录(文件夹)以及目录下的文件  
     * @param   sPath 被删除目录的文件路径  
     * @return  目录删除成功返回true,否则返回false  
     */  
    public static boolean deleteDirectory(String sPath) {   
        File dirFile = new File(sPath);   
        //如果dir对应的文件不存在,或者不是一个目录,则退出   
        if (!dirFile.exists() || !dirFile.isDirectory()) {   
            return false;   
        }   
        boolean flag = true;   
        //删除文件夹下的所有文件(包括子目录)   
        File[] files = dirFile.listFiles();   
        for (int i = 0; i < files.length; i++) {   
            //删除子文件   
            if (files[i].isFile()) {   
                flag = deleteFile(files[i].getAbsolutePath());   
                if (!flag) break;   
            } //删除子目录   
            else {   
                flag = deleteDirectory(files[i].getAbsolutePath());   
                if (!flag) break;   
            }   
        }   
        if (!flag) return false;   
        //删除当前目录   
        if (dirFile.delete()) {   
            return true;   
        } else {   
            return false;   
        }   
    }  

    }