private static boolean mv0( final java.io.File src, final java.io.File dst, final ArchiveDetector detector) { boolean ok = true; if (src.isDirectory()) { final long srcLastModified = src.lastModified(); final boolean srcIsArchived = src instanceof File && ((File) src).getInnerArchive() != null; final boolean dstIsArchived = dst instanceof File && ((File) dst).getInnerArchive() != null; final boolean srcIsGhost = srcIsArchived && srcLastModified <= 0; if (!srcIsGhost || !dstIsArchived || !File.isLenient()) dst.mkdir(); final String[] members = src.list(); if (!srcIsArchived && dstIsArchived) { // Create sorted entries if writing a new archive file. // This is courtesy only, so natural order is sufficient. Arrays.sort(members); } for (int i = 0, l = members.length; i < l; i++) { final String member = members[i]; ok &= mv0(detector.createFile(src, member), detector.createFile(dst, member), detector); } if (!srcIsGhost) ok &= dst.setLastModified(srcLastModified); } else if (src.isFile()) { // !isDirectory() try { cp(true, src, dst); } catch (IOException ex) { ok = false; } } else { ok = false; // don't move special files! } return ok && src.delete(); // only unlink if ok! }
/** * 删除指定的 Web 应用程序目录下所上传的文件 * * @param application JSP/Servlet 的 ServletContext * @param filePath 相对文件路径 */ public static void deleteFile(ServletContext application, String filePath) { if (!isEmpty(filePath)) { String physicalFilePath = application.getRealPath(filePath); if (!isEmpty(physicalFilePath)) { java.io.File file = new java.io.File(physicalFilePath); file.delete(); } } }
/** * Removes the entire directory tree represented by the parameter, regardless whether it's a file * or directory, whether the directory is empty or not or whether the file or directory is * actually an archive file, an entry in an archive file or not enclosed in an archive file at * all. * * <p>The name of this method is inspired by the Unix command line utility <code>rm</code> with * the <code>-r</code> option to operate recursively. * * <p>This file system operation is <em>not</em> atomic. * * @return Whether or not the entire directory tree was successfully removed. */ public static boolean rm_r(final java.io.File file) { boolean ok = true; if (file.isDirectory()) { // Note that listing the directory this way will cause a recursive // deletion if the directory is actually an archive file. // Although this does not provide best performance (the archive // file could simply be removed like an ordinary file), it ensures // that the state cached by the ArchiveController is not bypassed // and hence prevents a potential bug. java.io.File[] members = file.listFiles(); for (int i = members.length; --i >= 0; ) ok &= rm_r(members[i]); } return ok && file.delete(); }
/** Unchecked parameters version. */ private static void cp0(final boolean preserve, final java.io.File src, final java.io.File dst) throws IOException { assert src != null; assert dst != null; try { try { if (src instanceof File) { final File srcFile = (File) src; srcFile.ensureNotVirtualRoot("cannot read"); final String srcEntryName = srcFile.getEnclEntryName(); if (srcEntryName != null) { cp0(preserve, srcFile.getEnclArchive().getArchiveController(), srcEntryName, dst); return; } } } catch (RfsEntryFalsePositiveException srcIsNotArchive) { } // Treat the source like a regular file. final InputStream in = new java.io.FileInputStream(src); try { cp0(preserve, src, in, dst); } finally { try { in.close(); } catch (IOException ex) { throw new InputIOException(ex); } } } catch (FileNotFoundException ex) { throw ex; } catch (ArchiveBusyException ex) { throw new FileBusyException(ex); } catch (ArchiveFileSystemException afse) { final FileNotFoundException fnfe = new FileNotFoundException(afse.toString()); fnfe.initCause(afse); throw fnfe; } catch (IOException ex) { dst.delete(); throw ex; } }
public static void removePageFile(HTMLPage htmlPage, Identifier identifier, boolean EDIT_MODE) { String folderPath = (!EDIT_MODE) ? "live" + java.io.File.separator : "working" + java.io.File.separator; String velocityRootPath = Config.getStringProperty("VELOCITY_ROOT"); if (velocityRootPath.startsWith("/WEB-INF")) { velocityRootPath = com.liferay.util.FileUtil.getRealPath(velocityRootPath); } String filePath = folderPath + identifier.getInode() + "." + Config.getStringProperty("VELOCITY_HTMLPAGE_EXTENSION"); velocityRootPath += java.io.File.separator; java.io.File f = new java.io.File(velocityRootPath + filePath); f.delete(); DotResourceCache vc = CacheLocator.getVeloctyResourceCache(); vc.remove(ResourceManager.RESOURCE_TEMPLATE + filePath); CacheLocator.getHTMLPageCache().remove((HTMLPage) htmlPage); }
public synchronized void service(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { HttpSession dbSession = request.getSession(); JspFactory _jspxFactory = JspFactory.getDefaultFactory(); PageContext pageContext = _jspxFactory.getPageContext(this, request, response, "", true, 8192, true); ServletContext dbApplication = dbSession.getServletContext(); try { // 实例化 HttpSession session = request.getSession(); ServletContext context = session.getServletContext(); String path = context.getRealPath("/"); counter count = new counter(dbApplication); SmartUpload mySmartUpload = new SmartUpload(); mySmartUpload.setCharset("UTF-8"); nseer_db_backup1 qcs_db = new nseer_db_backup1(dbApplication); if (qcs_db.conn((String) dbSession.getAttribute("unit_db_name"))) { mySmartUpload.initialize(pageContext); String file_type = getFileLength.getFileType((String) session.getAttribute("unit_db_name")); long d = getFileLength.getFileLength((String) session.getAttribute("unit_db_name")); mySmartUpload.setMaxFileSize(d); mySmartUpload.setAllowedFilesList(file_type); try { mySmartUpload.upload(); String qcs_id = mySmartUpload.getRequest().getParameter("qcs_id"); String config_id = mySmartUpload.getRequest().getParameter("config_id"); String[] item = mySmartUpload.getRequest().getParameterValues("item"); if (item != null) { String[] file_name = new String[mySmartUpload.getFiles().getCount()]; String[] not_change = new String[mySmartUpload.getFiles().getCount()]; java.util.Date now = new java.util.Date(); SimpleDateFormat formatter = new SimpleDateFormat("yyyyMMdd"); String time = formatter.format(now); String standard_id = mySmartUpload.getRequest().getParameter("standard_id"); String sqla = "select attachment1 from qcs_intrmanufacture where qcs_id='" + qcs_id + "' and (check_tag='5' or check_tag='9')"; ResultSet rs = qcs_db.executeQuery(sqla); if (!rs.next()) { response.sendRedirect("draft/qcs/intrmanufacture_ok.jsp?finished_tag=1"); } else { String[] attachment = mySmartUpload.getRequest().getParameterValues("attachment"); String[] delete_file_name = new String[0]; if (attachment != null) { delete_file_name = new String[attachment.length]; for (int i = 0; i < attachment.length; i++) { delete_file_name[i] = rs.getString(attachment[i]); } } for (int i = 0; i < mySmartUpload.getFiles().getCount(); i++) { com.jspsmart.upload.SmartFile file = mySmartUpload.getFiles().getFile(i); if (file.isMissing()) { file_name[i] = ""; int q = i + 1; String field_name = "attachment" + q; if (!rs.getString(field_name).equals("")) not_change[i] = "yes"; continue; } int filenum = count.read( (String) dbSession.getAttribute("unit_db_name"), "qcsAttachmentcount"); count.write( (String) dbSession.getAttribute("unit_db_name"), "qcsAttachmentcount", filenum); file_name[i] = filenum + file.getFileName(); file.saveAs(path + "qcs/file_attachments/" + filenum + file.getFileName()); } String apply_id = mySmartUpload.getRequest().getParameter("apply_id"); String product_id = mySmartUpload.getRequest().getParameter("product_id"); String product_name = mySmartUpload.getRequest().getParameter("product_name"); String qcs_amount = mySmartUpload.getRequest().getParameter("qcs_amount"); String qcs_time = mySmartUpload.getRequest().getParameter("qcs_time"); String quality_way = mySmartUpload.getRequest().getParameter("quality_way"); String quality_solution = mySmartUpload.getRequest().getParameter("quality_solution"); String sampling_standard = mySmartUpload.getRequest().getParameter("sampling_standard"); String sampling_amount = mySmartUpload.getRequest().getParameter("sampling_amount"); String accept = mySmartUpload.getRequest().getParameter("accept"); String reject = mySmartUpload.getRequest().getParameter("reject"); String qualified = mySmartUpload.getRequest().getParameter("qualified"); String unqualified = mySmartUpload.getRequest().getParameter("unqualified"); String qcs_result = mySmartUpload.getRequest().getParameter("qcs_result"); String checker = mySmartUpload.getRequest().getParameter("checker"); String checker_id = mySmartUpload.getRequest().getParameter("checker_id"); String check_time = mySmartUpload.getRequest().getParameter("check_time"); String changer = mySmartUpload.getRequest().getParameter("changer"); String changer_id = mySmartUpload.getRequest().getParameter("changer_id"); String change_time = mySmartUpload.getRequest().getParameter("change_time"); String bodyab = new String( mySmartUpload.getRequest().getParameter("remark").getBytes("UTF-8"), "UTF-8"); String remark = exchange.toHtml(bodyab); sqla = "update qcs_intrmanufacture set apply_id='" + apply_id + "',product_id='" + product_id + "',product_name='" + product_name + "',qcs_amount='" + qcs_amount + "',qcs_time='" + qcs_time + "',quality_way='" + quality_way + "',quality_solution='" + quality_solution + "',sampling_standard='" + sampling_standard + "',sampling_amount='" + sampling_amount + "',accept='" + accept + "',reject='" + reject + "',qualified='" + qualified + "',unqualified='" + unqualified + "',changer_id='" + changer_id + "',qcs_result='" + qcs_result + "',changer='" + changer + "',change_time='" + change_time + "',remark='" + remark + "',check_tag='5'"; String sqlb = " where qcs_id='" + qcs_id + "'"; if (attachment != null) { for (int i = 0; i < attachment.length; i++) { sqla = sqla + "," + attachment[i] + "=''"; java.io.File file = new java.io.File(path + "qcs/file_attachments/" + delete_file_name[i]); file.delete(); } } for (int i = 0; i < mySmartUpload.getFiles().getCount(); i++) { if (not_change[i] != null && not_change[i].equals("yes")) continue; int p = i + 1; sqla = sqla + ",attachment" + p + "='" + file_name[i] + "'"; } String sql = sqla + sqlb; qcs_db.executeUpdate(sql); sql = "delete from qcs_intrmanufacture_details where qcs_id='" + qcs_id + "'"; qcs_db.executeUpdate(sql); String[] default_basis = mySmartUpload.getRequest().getParameterValues("default_basis"); String[] ready_basis = mySmartUpload.getRequest().getParameterValues("ready_basis"); String[] quality_method = mySmartUpload.getRequest().getParameterValues("quality_method"); String[] analyse_method = mySmartUpload.getRequest().getParameterValues("analyse_method"); String[] standard_value = mySmartUpload.getRequest().getParameterValues("standard_value"); String[] standard_max = mySmartUpload.getRequest().getParameterValues("standard_max"); String[] standard_min = mySmartUpload.getRequest().getParameterValues("standard_min"); String[] quality_value = mySmartUpload.getRequest().getParameterValues("quality_value"); String[] sampling_amount_d = mySmartUpload.getRequest().getParameterValues("sampling_amount_d"); String[] qualified_d = mySmartUpload.getRequest().getParameterValues("qualified_d"); String[] unqualified_d = mySmartUpload.getRequest().getParameterValues("unqualified_d"); String[] quality_result = mySmartUpload.getRequest().getParameterValues("quality_result"); String[] unqualified_reason = mySmartUpload.getRequest().getParameterValues("unqualified_reason"); for (int i = 0; i < item.length; i++) { if (!item[i].equals("")) { sql = "insert into qcs_intrmanufacture_details(qcs_id,item,default_basis,ready_basis,quality_method,analyse_method,standard_value,standard_max,standard_min,quality_value,sampling_amount_d,qualified_d,unqualified_d,quality_result,unqualified_reason,details_number) values('" + qcs_id + "','" + item[i] + "','" + default_basis[i] + "','" + ready_basis[i] + "','" + quality_method[i] + "','" + analyse_method[i] + "','" + standard_value[i] + "','" + standard_max[i] + "','" + standard_min[i] + "','" + quality_value[i] + "','" + sampling_amount_d[i] + "','" + qualified_d[i] + "','" + unqualified_d[i] + "','" + quality_result[i] + "','" + unqualified_reason[i] + "','" + i + "')"; qcs_db.executeUpdate(sql); } } response.sendRedirect("draft/qcs/intrmanufacture_ok.jsp?finished_tag=0"); } qcs_db.commit(); qcs_db.close(); } else { response.sendRedirect("draft/qcs/intrmanufacture_ok.jsp?finished_tag=7"); } } catch (Exception ex) { response.sendRedirect("draft/qcs/intrmanufacture_ok.jsp?finished_tag=6"); } } else { response.sendRedirect("error_conn.htm"); } } catch (Exception ex) { ex.printStackTrace(); } }
/** * Returns <code>true</code> if the given file exists or can be created and at least one byte can * be successfully written to it - the file is restored to its previous state afterwards. This is * a much stronger test than {@link File#canWrite()}. * * <p>Please note that if the file is actually open for reading or other activities this method * may not be able to reset the last modification time of the file after testing, in which case * <code>false</code> is returned. This is known to apply to the Windows platform, but not on Unix * platforms. */ public static boolean isWritableOrCreatable(final java.io.File file) { try { if (!file.exists()) { final boolean created = file.createNewFile(); boolean ok = isWritableOrCreatable(file); if (created && !file.delete()) ok = false; // be conservative! return ok; } else if (file.canWrite()) { // Some operating and file system combinations make File.canWrite() // believe that the file is writable although it's not. // We are not that gullible, so let's test this... final long time = file.lastModified(); if (!file.setLastModified(time + 1)) { // This may happen on Windows and normally means that // somebody else has opened this file // (regardless of read or write mode). // Be conservative: We don't allow writing to this file! return false; } boolean ok; try { // Open the file for reading and writing, requiring any // update to its contents to be written to the filesystem // synchronously. // As Dr. Simon White from Catalysoft, Cambridge, UK reported, // "rws" does NOT work on Mac OS X with Apple's Java 1.5 // Release 1 (equivalent to Sun's Java 1.5.0_02), however // it DOES work with Apple's Java 1.5 Release 3. // He also confirmed that "rwd" works on Apple's // Java 1.5 Release 1, so we use this instead. // Thank you very much for spending the time to fix this // issue, Dr. White! final RandomAccessFile raf = new RandomAccessFile(file, "rwd"); try { final boolean empty; int octet = raf.read(); if (octet == -1) { octet = 0; // assume first byte is 0 empty = true; } else { empty = false; } // Let's test if we can (over)write the first byte. raf.seek(0); raf.write((octet ^ -1) & 0xFF); // write complement try { // Rewrite original content and check success. raf.seek(0); raf.write(octet); raf.seek(0); final int check = raf.read(); // This should always return true unless the storage // device is faulty. ok = octet == check; } finally { if (empty) raf.setLength(0); } } finally { raf.close(); } } finally { if (!file.setLastModified(time)) { // This may happen on Windows and normally means that // somebody else has opened this file meanwhile // (regardless of read or write mode). // Be conservative: We don't allow (further) writing to // this file! ok = false; } } return ok; } else { // if (file.exists() && !file.canWrite()) { return false; } } catch (IOException ex) { return false; // don't allow writing if anything goes wrong! } }