เมื่อเร็ว ๆ นี้โครงการจะต้องอัปโหลดไฟล์ หลังจากเสร็จสิ้นการทำงานแบ่งปันและจดบันทึกเช่นกัน
ฟังก์ชั่นการอัปโหลดถูกนำไปใช้ในพื้นหลังและ Java และส่วนหน้าส่วนใหญ่จะถูกนำไปใช้ใน Ajax ของ JS พื้นหลังยังเพิ่มไฟล์ชั่วคราวที่จะถูกลบอย่างสม่ำเสมอ
เอฟเฟกต์ดังแสดงในภาพ
ก่อนอื่นคลาสหลักของฟังก์ชั่นการอัปโหลดต่อไปนี้เป็นรหัส
แพ็คเกจ util.upload; นำเข้า java.io.file; นำเข้า java.io.ioexception; นำเข้า java.text.simpledateFormat; นำเข้า java.util.date นำเข้า java.util.iterator; นำเข้า Java.util.list; javax.servlet.http.httpservlet; นำเข้า javax.servlet.http.httpservletrequest นำเข้า javax.servlet.http.httpservletresponse; นำเข้า javax.servlet.http.httpsession; org.apache.commons.fileupload.disk.diskfileitemfactory; นำเข้า org.apache.commons.fileupload.servlet.servletfileupload; บูลีนส่วนตัว isallowed; สตริงส่วนตัว upfilename; // กำหนดอาร์เรย์ด้วยชื่อคำต่อท้ายตามกฎหมายสตริงส่วนตัว [] nowledextName = สตริงใหม่ [] {"zip", "rar", // file "txt", "doc", "wps", "docx", "java", // text "xls", "xlsx", // ตาราง "ppt", "pptx", // slide "pdf", // play "f" jpg "," bmp "," httpservletResponse ตอบสนอง) พ่น servletexception, ioexception {dopost (คำขอ, การตอบสนอง); การตอบสนองต่อเซสชัน Setcharacterencoding ("UTF-8"); ค่าสูงสุดสำหรับไฟล์ที่อัปโหลดซึ่งจะต้องไม่เกิน 100MB int maxSize = 100*1024*1024; ServletFileUpload Upload = ใหม่ servletFilePilePload (โรงงาน); // สร้างการอัปโหลดผู้ฟังและตั้งค่าผู้ฟัง UploadListener Listener = ใหม่ uploadListener (); session.setAttribute ("ผู้ฟัง", ผู้ฟัง); upload.setProgressListener (ผู้ฟัง); // อัปโหลดพา ธ พา ธ พา ธ = request.getSession (). getServletContext (). getRealPath ("/อัปโหลด"); string requestPath = request.getSession (). getServletContext (). getContextPath ()+"/อัปโหลด"; ไฟล์ dirfile = ไฟล์ใหม่ (พา ธ ); //system.out.println(request.getSession (). getServletContext (). getContextPath ()); // ถ้าโฟลเดอร์ไม่มีอยู่ให้สร้างถ้า (! dirfile .Exists () &&! dirfile .isdirectory ()) {dirfile .mkdir (); } // สร้างโฟลเดอร์ตามวันที่และบันทึกลงในโฟลเดอร์ด้วยวันที่วันที่ที่สอดคล้องกันวันที่ = วันที่ใหม่ (); SimpledateFormat SDF = New SimpledateFormat ("yyyymmdd"); subdirName String = sdf.format (วันที่); ไฟล์ subdirfile = ไฟล์ใหม่ (path+"/"+subdirname); if (! subdirfile .exists () &&! subdirfile .isdirectory ()) {subdirfile .mkdir (); } ลอง {// parse upload รายการคำขอ <fileitem> items = upload.parserequest (คำขอ); Iterator <fileItem> itr = items.iterator (); ในขณะที่ (itr.hasnext ()) {fileItem item = (fileItem) itr.next (); // พิจารณาว่าเป็นโดเมนไฟล์หรือไม่ถ้า (! item.isformfield ()) {ถ้า (item.getName ()! = null &&! item.getName (). equals ("")) {// รับขนาดไฟล์ที่อัปโหลด String filename = item.getName (); // รับสตริงชื่อต่อท้ายไฟล์ [] splitName = filename.split ("//."); string extName = splitName [splitName.length-1]; // ตรวจสอบชื่อคำต่อท้ายของไฟล์สำหรับ (สตริงที่อนุญาต: ledeDextName) {ถ้า (อนุญาตให้ EqualSignorecase (extName)) {isallowed = true; }} if (! isallowed) {error = "รูปแบบไฟล์อัปโหลดผิดกฎหมาย!"; หยุดพัก; } ถ้า (upfilesize> maxSize) {error = "ไฟล์ที่คุณอัปโหลดมีขนาดใหญ่เกินไปโปรดเลือกไฟล์ที่ไม่เกิน 100MB!"; หยุดพัก; } // ในเวลานี้ไฟล์จะถูกเก็บไว้ชั่วคราวในหน่วยความจำของเซิร์ฟเวอร์โดยสร้างไฟล์วัตถุชั่วคราว tempfile = ไฟล์ใหม่ (makefilename (ชื่อไฟล์)); // ระบุไดเรกทอรีและชื่อไฟล์ของไฟล์อัปโหลดไฟล์เซิร์ฟเวอร์ไฟล์ = ไฟล์ใหม่ (path+"/"+subdirname+"/", tempfile.getName ()); item.write (ไฟล์); // วิธีแรกของการเขียนไฟล์คือ upfileName = requestpath+"/"+subdirname+"/"+tempfile.getName (); if (upfilename.equals ("")) {error = "ไม่มีการเลือกเพื่ออัปโหลดไฟล์!"; } system.out.println (upfilename); /*// สร้างวิธีที่สองในการเขียนไฟล์ของอินพุตสตรีมการอ่านไฟล์อินพุตสตรีมคือ = item.getInputStream (); ความยาว int = 0; ไบต์ [] โดย = ไบต์ใหม่ [1024]; fileOutputStream fos = new fileOutputStream (ไฟล์); ในขณะที่ ((length = is.read (by))! =-1) {fos.write (โดย, 0, ความยาว); //thread.sleep(10); } fos.close (); //thread.sleep(1000); */} else {error = "ไม่มีการเลือกอัปโหลดไฟล์!"; }}}} catch (Exception E) {E.printStackTrace (); ข้อผิดพลาด = "เกิดข้อผิดพลาดเมื่ออัปโหลดไฟล์:"+e.getMessage (); } if (! error.equals ("")) {system.out.println (ข้อผิดพลาด); session.setAttribute ("ข้อผิดพลาด", ข้อผิดพลาด); } else {session.setAttribute ("ผลลัพธ์", "ตกลง"); session.setAttribute ("ชื่อไฟล์", upfilename); }} / *** เพื่อป้องกันการแทนที่ไฟล์จะต้องสร้างชื่อไฟล์ที่ไม่ซ้ำกันสำหรับการอัปโหลดไฟล์* @param ชื่อไฟล์ต้นฉบับชื่อไฟล์* @@return ชื่อไฟล์ที่ไม่ซ้ำกันที่สร้างขึ้น* / สตริงส่วนตัว makefilename - มีความจำเป็นที่จะต้องแนะนำ Commons-Fileupload-1.3.1.jar และ Commons-io-2.4.jar
ในระหว่างกระบวนการอัปโหลดเราจำเป็นต้องได้รับข้อมูลเช่นความคืบหน้าการอัปโหลดแบบเรียลไทม์ ไลบรารีที่แนะนำเพิ่มอินเทอร์เฟซ ProgressListener สำหรับเรา เราจะเขียนคลาสอื่นเพื่อใช้อินเทอร์เฟซนี้และเพิ่มอินเทอร์เฟซนี้ในคลาสข้างต้น
// สร้างวัตถุจากโรงงานและไฟล์อัปโหลดวัตถุ DiskFileItemFactory โรงงาน = ใหม่ diskFileItemFactory (); ServletFileUpload Upload = ใหม่ servletFilePilePload (โรงงาน); // สร้างการอัปโหลดผู้ฟังและตั้งค่าผู้ฟัง UploadListener Listener = ใหม่ uploadListener (); session.setAttribute ("ผู้ฟัง", ผู้ฟัง); upload.setProgressListener (ผู้ฟัง);ด้านล่างนี้เป็นรหัสการใช้งานเฉพาะของคลาสฟังนี้
แพ็คเกจ util.upload; นำเข้า org.apache.commons.fileupload.progresslistener; UploadListener คลาสสาธารณะใช้ความคืบหน้า {bytesread ความผันผวนส่วนตัว = 0l, // จำนวนของไบต์ที่อัปโหลด contentLength = 0L Public UploadListener () {super (); } @Override การอัปเดตโมฆะสาธารณะ (ยาว abytesRead, acontentLength ยาว, int anitem) {bytesRead = abytesRead; ContentLength = AcontentLength; รายการ = anitem; } สาธารณะยาว getByTesRead () {return bytesRead; } สาธารณะยาว getContentLength () {ส่งคืน ContentLength; } public long getItem () {return item; -ตอนนี้คุณสามารถรับข้อมูลเช่นความคืบหน้าการอัปโหลด แต่คุณยังต้องมีเซิร์ฟเล็ตเพื่อกลับไปที่ส่วนหน้า การใช้งานต่อไปนี้
แพ็คเกจ util.upload; นำเข้า java.io.ioexception; นำเข้า java.io.printwriter; นำเข้า java.util.hashmap; นำเข้า java.util.map; นำเข้า Javax.servlet.servletexception; นำเข้า Javax.servlet.http.http. javax.servlet.http.httpservletResponse; นำเข้า javax.servlet.http.httpsession; นำเข้า org.apache.commons.fileupload.progresslistener; นำเข้า com.google.gson.gson;/** httpservlet {ส่วนตัวคงที่สุดท้าย Long SerialVersionUID = -3596466520775012991L; Void Doget ที่ได้รับการป้องกัน (คำขอ httpservletrequest, การตอบสนอง httpservletResponse) พ่น servletexception, ioexception {dopost (คำขอ, การตอบสนอง); } การป้องกันโมฆะ dopost (คำขอ httpservletrequest, การตอบสนอง httpservletResponse) พ่น servletexception, ioexception {request.setcharacterencoding ("UTF-8"); Response.Setcharacterencoding ("UTF-8"); ผู้ฟัง UploadListener = null; httpsession session = request.getSession (); string error = (string) session.getAttribute ("ข้อผิดพลาด"); String result = (string) session.getAttribute ("result"); String filename = (string) session.getAttribute ("ชื่อไฟล์"); PrintWriter out = response.getWriter (); long bytesread = 0, contentLength = 0; if (เซสชัน! = null) {listener = (updoadListener) เซสชัน. getAttribute ("ผู้ฟัง"); if (listener == null) {return; } else {bytesRead = listener.getByTesRead (); // จำนวนของ bytes ที่อัปโหลดเนื้อหาความยาวคลื่น = listener.getContentLength (); // bytes ทั้งหมด} // รูปแบบการส่งคืนที่กำหนดโดยตัวคุณเองคือสตริง rp = bytesRead +"," //system.out.println(rp); out.print (RP); /* // ส่งคืนแผนที่ข้อมูลรูปแบบ JSON <string, Object> MAP = ใหม่ HashMap <String, Object> (); map.put ("bytesRead", bytesRead); map.put ("contentLength", contentLength); map.put ("ข้อผิดพลาด", ข้อผิดพลาด); map.put ("ผลลัพธ์" ผลลัพธ์); map.put ("ชื่อไฟล์", ชื่อไฟล์); GSON GSON = New GSON (); สตริง json = gson.tojson (แผนที่); out.print (json);*/ out.flush (); out.close (); -รหัสฟังก์ชั่นที่อัพโหลดในพื้นหลังถูกเขียนขึ้น ต่อไปนี้เป็นส่วนหน้าเพื่อใช้การอัปโหลดก่อนอื่น HTML
<! doctype html> <html> <head> <meta charset = "utf-8"/> <script type = "text/javascript" src = "js/upfile.js" charset = "utf-8"> </script> <link rel = "stylesheet" > <a href = "javascript: addone ()"> เพิ่ม </a> <div id = "target"> <input type = "file" id = "file" name = "file" onChange = "addFile (เหตุการณ์)
อินเทอร์เฟซนั้นค่อนข้างง่ายเพียงเพิ่มแท็กและซ่อนอินพุตที่ถูกซ่อนไว้
แสดงความคืบหน้าการอัปโหลดของไฟล์ CSS การแสดงผลหลัก
#file {display: none; } .pro {Width: 500px; } .pBorder {ตำแหน่ง: ญาติ; ความกว้าง: 500px; /* ความกว้าง*/ เส้นขอบ: 1px Solid #B1D632; ช่องว่าง: 1px; } .DrawPro {WIDTH: 0PX; แสดง: บล็อก; ตำแหน่ง: ญาติ; ความเป็นมา: #B1D632; สี: #333333; ความสูง: 20px; /* ความสูง*/ จุดสูง: 20px; /* มันจะต้องสอดคล้องกับความสูงก่อนที่ข้อความจะเป็นศูนย์กลางในแนวตั้ง*/} .pspan {ตำแหน่ง: สัมบูรณ์; ความกว้าง: 500px; TEXT-ALIGN: CENTER; Font-Weight: ตัวหนา; -ถัดไปคือโฟกัสส่วนหน้าไฟล์ JS
// htmlvar upfile_html ที่แสดงข้อมูลการอัปโหลดคือ '<div> <div>' + '<span> 0%</span> </div> </div> <span name = "path"> </span> <img src = "Common/upload/images/del.png" = "Target"; // idvar ของ div เป้าหมายสำหรับการอัปโหลดไฟล์ httpxml = null; // xmlhttprequest วัตถุที่ส่งคำขออัปโหลด var httpprogress = null; // xmlhttpRequest วัตถุที่ส่งข้อมูลความคืบหน้าการร้องขอ array (); // บันทึกรายการไฟล์ที่อัปโหลด var f_input; // อัปโหลดวัตถุอินพุตที่อัปโหลดไฟล์ var flag = true; // สามารถตั้งค่าสถานะไฟล์ถัดไป varl = "อัปโหลด"; // คำขออัปโหลดไฟล์ urlvar gurl = "getProgress"; = 0; // idvar id ของไฟล์ที่กำลังอัปโหลด = 0; // id ของไฟล์สุดท้ายในคิว/*** วัตถุไฟล์*/ฟังก์ชั่น uploadfile (id, ไฟล์) {this.id = id; this.file = ไฟล์; this.state = 0; this.path = "";}/*** วิธีการเริ่มต้น*/window.onload = function init () {f_input = document.getElementById ("ไฟล์"); var tdiv = document.getElementById (targetDIV_ID); var oldspan = tdiv.getElementsByTagname ("span"); สำหรับ (var i = 0; i <oldspan.length; i ++) {oldFileList.push (oldspan [i] .getAttribute ("ชื่อ")); }}/** * เลือกไฟล์เพื่ออัปโหลด */ฟังก์ชัน addone () {f_input.value = null; f_input.click ();}/*** หลังจากเลือกไฟล์แล้วเพิ่มวัตถุไฟล์ลงในคิวและเริ่มอัปโหลด**/ฟังก์ชัน addfile (evt) {var f = f_input.files [0]; if (f! = undefined) {var uf = ใหม่ uploadfile (id, f); Uplist.push (UF); var div = document.createElement ("div"); div.setAttribute ("id", "pro" + (id)); div.setAttribute ("คลาส", "pro"); div.innerhtml = upfile_html; var targetDiv = document.getElementById (targetDIV_ID); TargetDiv.AppendChild (DIV); div.getElementsByTagname ("span") [1] .innerHtml = "ชื่อไฟล์:" + Uplist [id] .file.name; waittimer = setInterval ("อัปโหลด ()", 1,000); id ++; }}/*** อัปโหลดไฟล์ในคิว*/ฟังก์ชั่นอัปโหลด () {if (flag == true) {if (uplist.length> 0) {var uf; สำหรับ (var i = 0; i <uplist.length; i ++) {ถ้า (uplist [i] .state == 0) {uf = uplist [i]; Uplist [i] .state = 1; หยุดพัก; }} ถ้า (uf! = undefined & uf! = null) {flag = false; if (window.xmlhttprequest) {httpup = ใหม่ xmlhttprequest (); } อื่นถ้า (window.activexobject) {httpup = new ActiveXObject ("Microsoft.xmlhttp"); } var formData = new FormData (); formdata.append ("ไฟล์", uf.file); httpup.open ("โพสต์", uurl, true); httpup.upload.addeventListener ('ความคืบหน้า', uploadprogress, false); httpup.send (formdata); ตอนนี้ = uf.id; timer = setInterval ("getp ()", 50); }}}}/*** รับข้อมูลเช่นการอัปโหลดความคืบหน้า*/ฟังก์ชั่น getp () {ถ้า (window.xmlhttprequest) {httpprogress = ใหม่ xmlhttprequest (); } อื่นถ้า (window.activexobject) {httpprogress = new ActiveXObject ("Microsoft.xmlhttp"); } httpprogress.onreadyStateChange = onProgress; httpprogress.open ("โพสต์", gurl, true); httpprogress.setRequestheader ("ประเภทเนื้อหา", "แอปพลิเคชัน/x-www-form-urlencoded"); httpprogress.send ("& timestamp =" + (วันที่ใหม่ ()). getTime ());}/*** ประมวลผลข้อมูลอัปโหลดที่ส่งคืนและแสดงไปยังอินเตอร์เฟส*/ฟังก์ชั่น onprogress () {ถ้า var result = result.replace (/(^/s*) | (/s*$)/g, ""); var res = result.split (","); var now = parseint (res [0]); var ทั้งหมด = parseint (res [1]); var err = res [2]; var state = res [3]; var path = res [4]; var per = (ตอนนี้ / ทั้งหมด * 100) .tofixed (2); var prodiv = document.getElementById ("Pro" + NowId); if (prodiv! = null & prodiv! = undefined) {ถ้า (err! = "" err! = null & err.length> 0) {window.clearinterval (ตัวจับเวลา); if (cancelflag == 1) {err = "อัปโหลดสิ้นสุด"; cancelflag = 0; } prodiv.getElementsByTagname ("div") [0] .style.display = "ไม่มี"; prodiv.getElementsByTagname ("span") [1] .innerhtml = err; httpup.abort (); ธง = จริง; Uplist [NowId] .state = 3; กลับ; } if (state == "ตกลง") {prodiv.getElementByTagname ("div") [0] .style.display = "ไม่มี"; var tmpf = uplist [nowid] .file; prodiv.getElementByTagname ("span") [1] .innerhtml = "ชื่อไฟล์:" + tmpf.name; window.clearinterval (ตัวจับเวลา); ธง = จริง; Uplist [NowId] .state = 2; Uplist [NowId] .Path = PATH; กลับ; } prodiv.getElementsByTagname ("div") [1] .style.width = per * 5 + "px"; prodiv.getElementsByTagname ("span") [0] .innerhtml = per + "%"; }}}/*** วิธีการยกเลิกการอัปโหลด*/ฟังก์ชั่น Abortupload (OBJ) {var idstr = obj.parentNode.id; var id = idstr.slice (3); if (uplist [id] .state == 1) {httpup.abort (); ธง = จริง; cancelflag = 1; } else {uplist [id] .state = 3; } document.getElementById (idstr) .remove ();}/*** รับพา ธ เพื่ออัปโหลดไฟล์* @returns สตริงที่จัดรูปแบบ*/ฟังก์ชั่น getFileListStr () {var str = ""; if (oldFileList.length> 0) {สำหรับ (var i = 0; i <oldFileList.length; i ++) {ถ้า (oldFileList [i]! = null & oldFileList [i]! = "" oldFileList [i]! }}} สำหรับ (var i = 0; i <uplist.length; i ++) {var f = uplist [i]; if (f.state == 2) {str = str + f.path + ","; }} return str;}/*** ลบไฟล์แนบเก่าที่มีอยู่แล้วเมื่อมีการปรับเปลี่ยน**/ฟังก์ชันลบ (btn) {var num = btn.getattribute ("ชื่อ"); OldFileList [num - 1] = null; btn.parentNode.remove ();} ฟังก์ชั่น uploadprogress (e) {ถ้า (e.lengthcomputable) {var ibytesuploaded = e.loaded; var ibytestotal = e.total; document.getElementById ("ทดสอบ"). innerhtml = iByTesUploaded+"/"+iBytestotal; - ใช้ AJAX เพื่อส่งไฟล์อัปโหลดเพื่อรับความคืบหน้าการอัปโหลดผลลัพธ์และข้อมูลอื่น ๆ
ไฟล์ HTML5 API ที่ใช้คือ IE9 หรือสูงกว่าจะต้องเข้ากันได้ Firefox มีปัญหา คำขอ AJAX ไม่ส่งคืนทันที ผลลัพธ์เดียวกันจะถูกส่งคืนจนกว่าคำขอ AJAX ทั้งหมดจะถูกส่งซึ่งจะส่งผลให้เกิดความคืบหน้าการอัปโหลดที่ไม่ปรากฏขึ้น อย่างไรก็ตามคุณยังสามารถใช้ไฟล์ HTML5 API เพื่อรับซึ่งมีการเพิ่มรหัสเล็กน้อย ค่าในการทดสอบ div ด้านล่างหน้าคือความคืบหน้าที่ได้รับในส่วนหน้า
ไฟล์ที่อัปโหลดทั้งหมดได้ถูกนำไปใช้แล้วจากนั้นจะประมวลผลไฟล์ชั่วคราวที่อัปโหลด เนื่องจากมีการใช้ไฟล์ชื่อ UUID ไฟล์จำนวนมากจะถูกสร้างขึ้นและไฟล์ที่ไร้ประโยชน์จำเป็นต้องได้รับการประมวลผลเป็นประจำ การใช้ servletContextListener:
มีอินเทอร์เฟซ servletContextListener ใน Servlet API ซึ่งสามารถฟังวงจรชีวิตของวัตถุ ServletContext ซึ่งเป็นวงจรชีวิตของเว็บแอปพลิเคชัน
เมื่อคอนเทนเนอร์ servlet เริ่มต้นหรือสิ้นสุดการใช้งานเว็บแอปพลิเคชันเหตุการณ์ ServletContextEvent จะถูกเรียกใช้ซึ่งจัดการโดย ServletContextListener มีการกำหนดสองวิธีในอินเตอร์เฟส servletContextListener เพื่อจัดการเหตุการณ์ ServletContextEvent
การใช้คุณสมบัติของมันฟังก์ชั่นของการลบไฟล์ชั่วคราวเป็นประจำ รหัสมีดังนี้:
แพ็คเกจ util.upload; นำเข้า java.io.ioexception; นำเข้า java.io.inputstream; นำเข้า java.util.date; นำเข้า java.util.properties; นำเข้า java.util.timer; นำเข้า java.util.timertask; javax.servlet.servletContextListener;/ ** * Time Listener * * */ คลาสสาธารณะ TempFileListener ใช้ ServletContextListener {ตัวจับเวลาส่วนตัว; SystemTaskTest Private SystemTask; สตริงคงที่ส่วนตัวทุกครั้ง _time_run; คงที่ {คุณสมบัติ prop = คุณสมบัติใหม่ (); InputStream Instrem = TempFileManager.class.getClassLoader () .getResourceasstream ("tempfile.properties"); ลอง {prop.load (instrem); System.out.println (Instrem); Every_time_run = prop.getProperty ("Every_time_run"); } catch (ioexception e) {e.printstacktrace (); } ในที่สุด {ลอง {instrem.close (); } catch (ioexception e) {e.printstacktrace (); }}} // ผู้ฟังวิธีการเริ่มต้นโมฆะสาธารณะบริบทบริบท (servletContextEvent scce) {timer = timer ใหม่ (); SystemTask = ใหม่ SystemTaskTest (sce.getServletContext () .GetRealPath ("/"), sce.getServletContext ()); ลอง {system.out.println ("ตัวจับเวลาเริ่ม"); // ผู้ฟังได้รับไดเรกทอรีรูทของเส้นทางสตริงของเว็บไซต์ = scce.getServletContext (). getRealPath ("/"); นาน = long.parselong (Every_time_run) * 1000; // เวลาสำหรับการดำเนินการลูป System.out.println ("เวลา" + เวลา); // พารามิเตอร์แรกคือรหัสที่จะเรียกใช้พารามิเตอร์ที่สองคือเมื่อมันเริ่มทำงานและพารามิเตอร์ที่สามคือความถี่ที่มันกำลังทำงานอยู่ ทำซ้ำการดำเนินการของ timer.schedule (SystemTask, 10,000, เวลา); System.out.println ("เพิ่มตารางงานได้รับการเพิ่ม"); } catch (exception e) {e.printstacktrace (); }} public void contextDestroyed (servletContextEvent scaling) {ลอง {timer.cancel (); } catch (Exception E) {}}} / *** Time Tasker** / class SystemTaskTest ขยาย timertask {บริบท servletContext ส่วนตัว; เส้นทางสตริงส่วนตัว Public SystemTaskTest (เส้นทางสตริง, บริบท servletContext) {this.path = path; this.context = บริบท; } / *** ใส่งานที่จะดำเนินการอย่างสม่ำเสมอในการเรียกใช้* / โมฆะสาธารณะ Run () {TempFileManager ETF; ลอง {system.out.println ("เริ่มงาน!"); // รหัสที่จะดำเนินการ system.out.println (วันที่ใหม่ (). tolocalestring ()); ETF = New TempFileManager (เส้นทาง); etf.run (); System.out.println ("ระบุการดำเนินการงานเสร็จสมบูรณ์!"); } catch (exception e) {e.printstacktrace (); -ข้างต้นเป็นเพียงผู้ฟังซึ่งรับผิดชอบในการเรียกใช้วิธีการลบไฟล์ชั่วคราวเป็นประจำ การใช้งานเฉพาะคือคลาสต่อไปนี้
แพ็คเกจ util.upload; นำเข้า java.io.file; นำเข้า java.io.ioexception; นำเข้า java.io.inputstream; นำเข้า java.util.date; นำเข้า java.util.properties;/*** ลบไฟล์บนเซิร์ฟเวอร์**/public class tempfileManager เวลาสำหรับการจัดเก็บไฟล์คือหนึ่งวันคงที่ {คุณสมบัติ prop = คุณสมบัติใหม่ (); InputStream Instrem = TempFileManager.class.getClassLoader () .getResourceasstream ("execl.properties"); ลอง {prop.load (instrem); Retention_time = prop.getProperty ("file_retention_time"); } catch (ioexception e) {e.printstacktrace (); } ในที่สุด {ลอง {instrem.close (); } catch (ioexception e) {e.printstacktrace (); }}} /*** Constructor พารามิเตอร์การเริ่มต้น * @param Path */ สาธารณะ tempfileManager (เส้นทางสตริง) {this.path = path; } / *** ใส่รหัสที่เธรดต้องการดำเนินการในการเรียกใช้ ()* / โมฆะสาธารณะเรียกใช้ () {system.out.println ("การจัดการไฟล์เริ่มต้น ===================================== DELETEFILES (ไฟล์);} / ** * BATCH DELETE FILLE * * @Param โฟลเดอร์ * / โมฆะสาธารณะ deleetefiles (โฟลเดอร์ไฟล์) {ถ้า (Folder.isdirectory ()) {ไฟล์ [] files = folder.listfiles (); if (candeleteFile (โฟลเดอร์)) {ถ้า (folder.delete ()) {system.out.println ("โฟลเดอร์" + โฟลเดอร์. getName () + "ลบได้สำเร็จ!"); (int i = 0; i <files.length; i ++) {ถ้า (ไฟล์ [i] .isdirectory ()) {deletefiles (ไฟล์ [i]); ลบไฟล์ที่ตรงตามเกณฑ์ถ้า (CandeleteFile (ไฟล์)) {ถ้า (file.delete ()) {system.out.println ("ไฟล์" + file.getName () + "ลบสำเร็จ!"); } else {system.out.println ("ไฟล์" + file.getName () + "ลบล้มเหลว! อาจใช้ไฟล์นี้"); }} else {}} else {system.out.println ("ไม่มีไฟล์ที่จะถูกลบ"); }} catch (exception e) {system.out.println ("ลบไฟล์ล้มเหลว ============="); E.PrintStackTrace (); }} / *** พิจารณาว่าไฟล์สามารถลบได้* / บูลีนส่วนตัว CandeleteFile (ไฟล์ไฟล์) {วันที่ peledate = getFiledate (ไฟล์); วันที่วันที่ = วันที่ใหม่ (); Long Time = (date.getTime () - FileDate.getTime ()) / 1000 /60 - Integer.ParseInt (RETINGING_TIME); // นาทีระหว่างเวลาปัจจุบันและช่วงเวลาไฟล์ // System.out.println ("เวลา =="+เวลา); if (เวลา> 0) {return true; } else {return false; }} / ** * รับเวลาการแก้ไขล่าสุดของไฟล์ * * @param ไฟล์ * @return * / วันที่ส่วนตัว getFiledate (ไฟล์ไฟล์) {Long ModifiedTime = file.lastModified (); วันที่ d = วันที่ใหม่ (แก้ไขเวลา); กลับ D; -ตรวจสอบว่าไฟล์หมดเวลาและโฟลเดอร์สามารถลบได้โดยอัตโนมัติหรือไม่หากหมดเวลา
ข้างต้นเป็นเรื่องเกี่ยวกับบทความนี้ฉันหวังว่ามันจะเป็นประโยชน์สำหรับทุกคนในการเรียนรู้การเขียนโปรแกรม Java