java delete是什么,让我们一起了解一下。
delete是指删除,常用于编程语言中(C++,SQL等等)。而在java中的delete可以删除一个对象的属性,却不能删除一个变量,也不能删除一个函数,delete只有当一个属性无法被删除时才返回false。
为什么delete只有当一个属性无法被删除时才返回false呢?
举例说明:比如在项目中要删除文件夹, 只有一层, 下面有zip包, jpg图片, xml文件, 但是在删除时, 有一部分文件却删不掉, delete的结果是false。
示例代码如下:
public void deleteDir(File file) { if (file.exists()) { File files[] = file.listFiles(); for (int i = 0; i < files.length; i++) { System.out.println("删除" + files[i].getAbsolutePath()); boolean b = files[i].delete(); System.out.println(b); } file.delete(); } else { System.out.println("所删除的文件不存在!" + '\n'); } }
上述业务逻辑是, 根据业务号从数据库读取该业务号下影像的路径,然后找到对应的文件并复制到以业务号命名的文件夹下,以业务号命名的文件夹放在指定的文件夹destdir下,然后然后根据影像信息生成xml报文。
当报文生成后, 将影像和报文打包成zip, 然后将zip通过第三方接口上传到影像平台。当一个业务上传成功后, 要删除以这个业务号命名的目录, 就是在删除时出现了以上描述的问题, 那么到底是哪个环节的问题?
一个是拷贝文件, 一个是生成zip包, 无非这两个地方, 所以, 统统加了赋空和回收的操作代码如下:
fos.flush(); fos.close(); fis.close(); fis = null; fos = null; System.gc();
public boolean zipMaterial(String dir, String busNO) { File directory = new File(dir); File[] files = directory.listFiles(); try { FileOutputStream output = new FileOutputStream(new File(dir + busNO + ".zip")); ZipOutputStream out = new ZipOutputStream(new BufferedOutputStream( output)); for (int i = 0; i < files.length; i++) { InputStream in = new FileInputStream(files[i]); ZipEntry e = new ZipEntry(files[i].getName()); out.putNextEntry(e); int len = 0; byte[] b = new byte[1024]; while ((len = in.read(b)) != -1) { out.write(b, 0, len); out.flush(); } out.closeEntry(); } out.flush(); output.flush(); out.close(); output.close(); out = null; output = null; System.gc(); } catch (FileNotFoundException e) { return false; } catch (IOException e) { return false; } return true; }
再次运行测试后,就可以了。可见如果是文件, 可以删除, 但如果是目录, 必须是空的才可以删除。
以上就是小编今天的分享了,希望可以帮助到大家。