في الآونة الأخيرة ، يحتاج المشروع إلى تحميل ملف. بعد الانتهاء من العمل ، شاركه وتدوين الملاحظات أيضًا.
يتم تنفيذ وظيفة التحميل في الخلفية وجافا ، ويتم تنفيذ الواجهة الأمامية بشكل أساسي في AJAX من JS. تضيف الخلفية أيضًا ملفات مؤقتة يتم حذفها بانتظام.
التأثير كما هو موضح في الصورة
بادئ ذي بدء ، الفئة الرئيسية لوظيفة التحميل ، ما يلي هو الرمز
package util.upload ؛ import java.io.file ؛ import java.io.ioException ؛ import java.text.simpledateformat ؛ import java.util.date ؛ import java.util.iterator ؛ import java.util.list ؛ import java.util.uud ؛ javax.servlet.http.httpservlet ؛ استيراد javax.servlet.http.httpletrequest ؛ استيراد javax.servlet.http.httpservletresponse ؛ استيراد javax.servlet.http.httpsession ؛ استيراد org.commons.filet.file org.apache.commons.fileupload.disk.diskfileItemFactory ؛ import org.apache.commons.fileupload.servlet.servletfilePload ؛ public class uploadservlet منطقية خاصة سلسلة خاصة upfilename ؛ // تحديد المصفوفة مع اسم اللاحقة القانونية السلسلة الخاصة [] المسموح بها "txt" ، "doc" ، "wps" ، "docx" ، "java" ، // text "xls" ، استجابة httpservletresponse) servletexception ، ioException {dopost (request ، response) ؛ response.setCharacterEncoding("utf-8"); //Get session, save progress and upload results, upload starts as nok, when Ok means uploading is completed HttpSession session=request.getSession(); session.setAttribute("result", "nok"); session.setAttribute("error", ""); String error=""; upFileName=""; isAllowed=false; //Set a أقصى قيمة للملف الذي تم تحميله ، والذي يجب ألا يتجاوز 100 ميجابايت MaxSize = 100*1024*1024 ؛ servletfileupload تحميل = جديد servletfileupload (المصنع) ؛ // إنشاء مستمع تحميل وقم بتعيين مستمع مستمع مستمع = جديد uploadListener () ؛ Session.setAttribute ("المستمع" ، المستمع) ؛ expload.setProgressListener (مستمع) ؛ // تحميل مسار سلسلة المسار = request.getSession (). getServletContext (). getRealPath ("/expload") ؛ string requestPath = request.getSession (). getServletContext (). getContextPath ()+"/upload" ؛ ملف dirfile = ملف جديد (path) ؛ //system.out.println(request.getSession (). getServletContext (). getContextPath ()) ؛ // إذا لم يكن المجلد موجودًا ، فقم بإنشاء إذا (! dirfile .exists () &&! } // قم بإنشاء مجلد بناءً على التاريخ وحفظه في المجلد مع تاريخ تاريخ التاريخ المقابل = تاريخ جديد () ؛ SimpleDateFormat SDF = جديد spileDateFormat ("yyyymmdd") ؛ سلسلة subdirname = sdf.format (التاريخ) ؛ ملف subdirfile = ملف جديد (path+"/"+subdirname) ؛ if (! subdirfile .exists () &&! subdirfile .isdirectory ()) {subdirfile .mkdir () ؛ } جرب {// parse request request list <IptiETem> عناصر = upload.parserequest (request) ؛ iterator <iretiTem> itr = items.iterator () ؛ بينما (itr.hasnext ()) {fileItem item = (fileItem) itr.next () ؛ // حدد ما إذا كان مجال الملف إذا (! item.isformfield ()) {if (item.getName ()! = null &&! item.getName (). متساوٍ ("")) {// الحصول على حجم الملف المحمّل واسم الملف الطويل = item.getSize () ؛ اسم ملف السلسلة = item.getName () ؛ // احصل على سلسلة اسم لاحقة الملف [] splitname = filename.split ("//.") ؛ String extName = splitname [splitname.length-1] ؛ ] }} if (! isallowed) {error = "تنسيق ملف التحميل غير قانوني!" ؛ استراحة؛ } if (upfilesize> maxSize) {error = "الملف الذي تحميله كبير جدًا ، يرجى تحديد ملف لا يتجاوز 100 ميجابايت!" ؛ استراحة؛ } // في هذا الوقت يتم تخزين الملف مؤقتًا في ذاكرة الخادم ، حيث يقوم بإنشاء ملف كائن مؤقت tempfile = ملف جديد (MakeFilename (اسم الملف)) ؛ // حدد الدليل واسم الملف لملف خادم تحميل الملف = ملف جديد (مسار+"/"+subdirname+"/" ، tempfile.getName ()) ؛ item.write (ملف) ؛ // الطريقة الأولى لكتابة الملف هي upfilename = requestPath+"/"+subdirname+"/"+tempfile.getName () ؛ if (upfilename.equals ("")) {error = "no selection to تحميل ملف!" ؛ } system.out.println (upfilename) ؛ /*// إنشاء الطريقة الثانية لكتابة ملف دفق الإدخال قراءة ملف inputStream هو = item.getInputStream () ؛ طول int = 0 ؛ Byte [] by = new byte [1024] ؛ fileOutputStream fos = new FileOutputStream (ملف) ؛ بينما ((طول = IS.Read (by))! =-1) {fos.write (بواسطة ، 0 ، طول) ؛ //thread.sleep(10) ؛ } fos.close () ؛ //thread.sleep(1000) ؛ */} آخر {error = "لا يوجد تحديد لتحميل الملف!" ؛ }}}} catch (استثناء e) {E.PrintStackTrace () ؛ خطأ = "حدث خطأ عند تحميل الملف:"+E.GetMessage () ؛ } if (! error.equals ("")) {system.out.println (error) ؛ Session.setAttribute ("خطأ" ، خطأ) ؛ } else {session.setAttribute ("result" ، "ok") ؛ session.setAttribute ("filename" ، upfilename) ؛ }} / *** لمنع الكتابة فوق الملف ، يجب إنشاء اسم ملف فريد لتحميل الملف* param filename اسم الملف الأصلي* return اسم الملف الفريد الذي تم إنشاؤه* / السلسلة الخاصة makefilename (اسم ملف السلسلة) {return uuid.randomuid (). toString () + "_" _ "filename ؛ }} من الضروري تقديم المشاعات-Filepload-1.3.1.Jar و Commons-IO-2.4.Jar
أثناء عملية التحميل ، نحتاج إلى الحصول على معلومات مثل التحميل في الوقت الفعلي. أضافت المكتبة المقدمة واجهة ProgressListener بالنسبة لنا. سنكتب فئة أخرى لتنفيذ هذه الواجهة ، وإضافة هذه الواجهة إلى الفئة أعلاه.
// إنشاء كائنات المصنع وتحميل ملفات ملفات DiskfileItemFactory Factory = New DiskfileItemFactory () ؛ servletfileupload تحميل = جديد servletfileupload (المصنع) ؛ // إنشاء مستمع تحميل وقم بتعيين مستمع مستمع مستمع = جديد uploadListener () ؛ Session.setAttribute ("المستمع" ، المستمع) ؛ expload.setProgressListener (مستمع) ؛فيما يلي رمز التنفيذ المحدد لفئة الاستماع هذه
package util.upload ؛ import org.apache.commons.fileupload.progressListener ؛ public exploadlistener تنفذ ProgressListener {private folatile bytesread = 0l ، // عدد المحتوى bytes المحمّل = 0L ، uploadListener () {super () ؛ } Override public void update (abytesread long ، acontentlength ، int anitem) {bytesread = abytesread ؛ contentLength = acontentLength ؛ البند = Anitem ؛ } public getBytesRead () {return bytesread ؛ } public getContentLength () {return contentLength ؛ } public long getItem () {return item ؛ }}الآن يمكنك الحصول على معلومات مثل التحميل التقدم ، ولكن لا تزال بحاجة إلى servlet للعودة إلى الواجهة الأمامية. التنفيذ التالي
package util.upload ؛ استيراد java.io.ioException ؛ استيراد java.io.printwriter ؛ استيراد java.util.hashmap ؛ استيراد java.util.map ؛ استيراد javax.servlet.servletexception ؛ javax.servlet.http.httpservletresponse ؛ استيراد javax.servlet.http.httpsession ؛ استيراد org.apache.commons.fileUpload httpservlet {private static final long serialversionuid = -3596466520775012991l ؛ DOGED VOID DOGET (طلب httpservletrequest ، استجابة httpservletresponse) يلقي servleTexception ، ioException {dopost (request ، response) ؛ } dopost void المحمي (طلب httpservletrequest ، استجابة httpservletresponse) يلقي servletexception ، ioException {request.setcharacterencoding ("utf-8") ؛ استجابة. setcharacterencoding ("UTF-8") ؛ مستمع uploadListener = null ؛ جلسة httpsession = request.getSession () ؛ سلسلة خطأ = (سلسلة) session.getAttribute ("خطأ") ؛ سلسلة السلسلة = (سلسلة) session.getAttribute ("النتيجة") ؛ اسم ملف السلسلة = (String) session.getAttribute ("filename") ؛ printWriter out = response.getWriter () ؛ bytesread = 0 ، contentLength = 0 ؛ if (session! = null) {leader = (UploadListener) session.getAttribute ("المستمع") ؛ if (المستمع == null) {return ؛ } else {bytesRead = leader.getBytesRead () ؛ // عدد bytes contentLength = leader.getContentLength () ؛ // total bytes} // تنسيق الإرجاع المحدد من قبل نفسك هو سلسلة rp = bytesread +"،" +محتوى +"،" +خطأ +" //system.out.println(RP) ؛ out.print (rp) ؛ /* // إرجاع خريطة بيانات تنسيق JSON <سلسلة ، كائن> خريطة = new HashMap <string ، Object> () ؛ map.put ("bytesread" ، bytesread) ؛ map.put ("contentLength" ، contentLength) ؛ map.put ("خطأ" ، خطأ) ؛ map.put ("النتيجة" ، النتيجة) ؛ map.put ("اسم الملف" ، اسم الملف) ؛ gson gson = new gson () ؛ String json = gson.tojson (map) ؛ 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 = "styles" <Body> <a href = "javaScript: addone ()"> إضافة </a> <div id = "target"> <input type = "file" id = "file" name = "file" onChange = "addFile (event)" multip/> </viv> <span id = "test"> 0 </span> </body> </html>
الواجهة بسيطة نسبيًا ، فقط أضف علامة ، ويتم إخفاء الإدخال.
عرض التقدم المحملة لملف CSS العرض الرئيسي
#file {display: none ؛ } .pro {width: 500px ؛ } .pborder {الموضع: النسبي ؛ العرض: 500 بكسل ؛ /* العرض*/ الحدود: 1px Solid #B1d632 ؛ الحشو: 1px ؛ } .drawpro {width: 0px ؛ العرض: كتلة ؛ الموقف: قريب الخلفية: #B1D632 ؛ اللون: #333333 ؛ الارتفاع: 20 بكسل ؛ /* الارتفاع*/ الخط: 20 بكسل ؛ /* يجب أن يكون متسقًا مع الارتفاع قبل أن يكون النص مركّزًا رأسياً*/} .pspan {الموضع: Absolute ؛ العرض: 500 بكسل ؛ محاذاة النص: المركز ؛ خط الرصيف: جريئة ؛ }التالي هو التركيز في الواجهة الأمامية ، ملف JS
. targetdiv_id = "target" ؛ // idvar من الهدف div لتحميل الملف httpxml = null ؛ // كائن xmlhttprequest الذي يرسل طلب التحميل var httpprogress = nehl ؛ Array () ؛ // احفظ قائمة الملفات التي تم تحميلها var f_input ؛ // قم بتحميل كائن الإدخال الذي يقوم بتحميل ملف var flag = true ؛ // هل يمكن لعلم الملف التالي var uurl = "upload" ؛ 0 ؛ // idvar id للملف الذي يتم تحميله = 0 ؛ // معرف الملف الأخير في قائمة الانتظار/*** كائن الملف*/وظيفة uploadFile (id ، file) {this.id = id ؛ this.file = ملف ؛ this.state = 0 ؛ this.path = "" ؛}/*** طريقة التهيئة*/window.onload = function init () {f_input = document.getElementById ("file") ؛ var tdiv = document.getElementById (targetdiv_id) ؛ var oldspan = tdiv.getElementSbyTagName ("span") ؛ لـ (var i = 0 ؛ i <oldspan.length ؛ i ++) {oldfilelist.push (oldspan [i] .getAttribute ("name")) ؛ }}/** * حدد ملفًا لتحميل */وظيفة addone () {f_input.value = null ؛ f_input.click () ؛}/*** بعد تحديد الملف ، أضف كائن الملف إلى قائمة الانتظار وبدء تحميل**/وظيفة addFile (evt) {var f = f_input.files [0] ؛ if (f! = undefined) {var uf = new apploadFile (id ، f) ؛ uplist.push (UF) ؛ var div = document.createElement ("div") ؛ div.setattribute ("id" ، "pro" + (id)) ؛ div.setattribute ("class" ، "pro") ؛ div.innerhtml = upfile_html ؛ var targetDiv = document.getElementById (targetdiv_id) ؛ TargetDiv.AppendChild (div) ؛ div.getElementsByTagName ("span") [1] .innerhtml = "file name:" + uplist [id] .file.name ؛ WaitTimer = setInterval ("TOPLOAD ()" ، 1000) ؛ id ++ ؛ }}/*** قم بتحميل الملف في قائمة الانتظار*/وظيفة expload () {if (flag == true) {if (uplist.length> 0) {var uf ؛ لـ (var i = 0 ؛ i <uplist.length ؛ i ++) {if (uplist [i] .state == 0) {uf = uplist [i] ؛ uplist [i] .State = 1 ؛ استراحة؛ }} if (uf! = undefined & uf! = null) {flag = false ؛ if (window.xmlHttPrequest) {httpup = new xmlHttPrequest () ؛ } if if (window.activexobject) {httpup = new ActiveXObject ("Microsoft.xmlHttp") ؛ } var formData = new FormData () ؛ formdata.append ("file" ، uf.file) ؛ httpup.open ("post" ، uurl ، true) ؛ httpup.upload.addeventListener ('Progress' ، UploadProgress ، false) ؛ httpup.send (formData) ؛ nowid = uf.id ؛ Timer = setInterval ("getp ()" ، 50) ؛ }}}}/*** احصل على معلومات مثل التحميل التقدم*/وظيفة getp () {if (window.xmlHtpRequest) {httpprogress = new xmlhttprequest () ؛ } آخر if (window.activexobject) {httpprogress = new ActiveXObject ("Microsoft.xmlHttp") ؛ } httpprogress.onReadyStateChange = OnProgress ؛ httpprogress.open ("post" ، gurl ، true) ؛ httpprogress.setRequestHeader ("نوع المحتوى" ، "التطبيق/x-www-form-urlencoded") ؛ httpprogress.send ("& timestamp =" + (date date ()). getTime ()) ؛}/*** معالجة معلومات التحميل المعتمدة وعرضها على الواجهة*/function OnProgress () {httpprogress.readyState == 4 && var result = result.replace (/(^/s*) | (/s*$)/g ، "") ؛ var res = result.split ("،") ؛ var now = parseint (res [0]) ؛ var all = parseint (res [1]) ؛ var err = res [2] ؛ var state = res [3] ؛ var path = res [4] ؛ var per = (الآن / All * 100) .Tofixed (2) ؛ var prodiv = document.getElementById ("pro" + nowid) ؛ if (prodiv! = null & prodiv! = غير محدد) {if (err! = "" & err! = null & err.length> 0) {window.clearinterval (timer) ؛ if (cancelflag == 1) {err = "upload inning" ؛ cancelflag = 0 ؛ } prodiv.getElementsByTagName ("div") [0] .style.display = "none" ؛ prodiv.getElementSbyTagName ("span") [1] .innerhtml = err ؛ httpup.abort () ؛ العلم = صحيح ؛ uplist [nowid] .State = 3 ؛ يعود؛ } if (state == "ok") {prodiv.getElementSbyTagName ("div") [0] .style.display = "none" ؛ var tmpf = uplist [nowid] .file ؛ prodiv.getElementsByTagName ("span") [1] .innerhtml = "file name:" + 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 ؛ } آخر {uplist [id] .state = 3 ؛ } document.getElementById (idstr) .remove () ؛}/*** احصل على مسار لتحميل ملف* regurns string*/function getFileliststr () {var str = "" ؛ if (oldfilelist.length> 0) {for (var i = 0 ؛ i <oldfilelist.length ؛ i ++) {if (oldfilelist [i]! = null & oldfilelist [i]! }}} لـ (var i = 0 ؛ i <uplist.length ؛ i ++) {var f = uplist [i] ؛ if (f.state == 2) {str = f.path + "،" ؛ }} return str ؛}/*** قم بإزالة المرفق القديم الذي كان موجودًا بالفعل عند التعديل**/function removeold (btn) {var num = btn.getattribute ("name") ؛ oldfilelist [num - 1] = null ؛ btn.parentnode.remove () ؛} دالة exploadprogress (e) {if ( var ibytestotal = etotal ؛ document.getElementById ("test"). innerhtml = ibytesuploaded+"/"+ibytestotal ؛ }} استخدم AJAX لإرسال ملفات التحميل للحصول على تقدم التحميل والنتائج والمعلومات الأخرى.
واجهة برمجة تطبيقات ملف HTML5 المستخدمة لذلك يجب أن تكون IE9 أو أعلى متوافقة. لدى Firefox مشكلة. طلبات AJAX لا تعود على الفور. سيتم إرجاع نفس النتيجة حتى يتم إرسال جميع طلبات Ajax ، مما سيؤدي إلى عدم عرض تقدم التحميل. ومع ذلك ، يمكنك أيضًا استخدام واجهة برمجة تطبيقات ملف HTML5 للحصول عليها ، والتي تحتوي على رمز صغير. القيمة في DIV الاختبار أسفل الصفحة هي التقدم الذي تم الحصول عليه في الواجهة الأمامية.
تم تنفيذ جميع الملفات التي تم تحميلها ، ثم تتم معالجة الملفات المؤقتة التي تم تحميلها. نظرًا لاستخدام الملفات المسماة UUID ، سيتم إنشاء العديد من الملفات ، ويجب معالجة تلك غير المجدية بانتظام. باستخدام ServletContextListener:
توجد واجهة ServletContextListener في واجهة برمجة تطبيقات Servlet ، والتي يمكن أن تستمع لدورة حياة كائن ServletContext ، والتي هي في الواقع دورة حياة تطبيق الويب.
عندما تبدأ حاوية Servlet أو تنهي تطبيق الويب ، يتم تشغيل حدث ServletContextevent ، والذي يتم التعامل معه بواسطة ServletContextListener. يتم تعريف طريقتين في واجهة ServletContextListener للتعامل مع حدث ServletContexTevent.
باستخدام ميزاتها ، يتم تحقيق وظيفة حذف الملفات المؤقتة بانتظام. الرمز كما يلي:
package util.upload ؛ import java.io.ioException ؛ استيراد java.io.inputstream ؛ استيراد java.util.date ؛ استيراد java.util.properties ؛ استيراد java.util.timer ؛ import java.util.timertask ؛ import javax.servlet.servletxt ؛ javax.servlet.servletContextListener ؛/ ** * مستمع الوقت * * */ الفئة العامة tempfiLelistener تنفذ servletContextListener {private timer timer ؛ SystemTaskTest SystemTask ؛ سلسلة ثابتة خاصة Every_time_run ؛ ثابت {Properties Prop = New Properties () ؛ 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 () ؛ } أخيرًا {try {instrem.close () ؛ } catch (ioException e) {E.PrintStackTrace () ؛ }}} // المستمع الأسلوب الأولي للأسلوب الفراغ العام contextinitialized (servletContexTevent scce) {timer = new timer () ؛ SystemTask = new SystemTaskTest (sce.getServletContext () .getRealPath ("/") ، sce.getServletContext ()) ؛ حاول {system.out.println ("Timer chign") ؛ // يحصل المستمع على الدليل الجذري لسلسلة الموقع (scce.getServletContext (). getRealPath ("/") ؛ وقت طويل = long.parselong (Every_time_run) * 1000 ؛ // الوقت لتنفيذ الحلقة system.out.println ("time" + time) ؛ // المعلمة الأولى هي الكود الذي سيتم تشغيله ، والمعلمة الثانية هي عندما تبدأ في التشغيل ، والمعلمة الثالثة هي عدد المرات التي يتم تشغيلها. تكرار تنفيذ Timer.Schedule (SystemTask ، 10000 ، time) ؛ System.out.println ("تمت إضافة جدول المهام") ؛ } catch (استثناء e) {E.PrintStackTrace () ؛ }} public void contextDestroyed (servletContexTevent Scal) {try {timer.cancel () ؛ } catch (استثناء e) {}}} / *** time tasker** / class SystemTaskTest يمتد timertask {private servletcontext context ؛ مسار السلسلة الخاص SystemTaskTest العامة (مسار السلسلة ، سياق servletContext) {this.path = path ؛ this.context = السياق ؛ } / *** ضع المهمة المراد تنفيذها بانتظام في التشغيل* / public void run () {tempfileManager etf ؛ حاول {system.out.println ("ابدأ المهمة!") ؛ // الكود المراد تنفيذه system.out.println (تاريخ جديد (). tolocalestring ()) ؛ ETF = TempFileManager جديد (PATH) ؛ etf.run () ؛ System.out.println ("حدد تنفيذ المهمة اكتمل!") ؛ } catch (استثناء e) {E.PrintStackTrace () ؛ }}}ما سبق هو مجرد مستمع ، وهو مسؤول عن استدعاء الطريقة لحذف الملفات المؤقتة بانتظام. التنفيذ المحدد هو الفئة التالية
package util.upload ؛ استيراد java.io.file ؛ استيراد java.io.ioException ؛ استيراد java.io.inputstream ؛ استيراد java.util.date ؛ استيراد java.util.properties ؛/*** حذف الملف على الخادم**/public class tempfilemanger {private string parate ؛ "1440" ؛ // وقت تخزين الملفات هو يوم واحد ثابت {Properties Prop = New Properties () ؛ inputStream instrem = tempfileManager.class.getClassLoader () .getResourCeasStream ("execl.properties") ؛ حاول {prop.load (instrem) ؛ attreence_time = prop.getProperty ("file_retention_time") ؛ } catch (ioException e) {E.PrintStackTrace () ؛ } أخيرًا {try {instrem.close () ؛ } catch (ioException e) {E.PrintStackTrace () ؛ }}} /*** مُنشئ. معلمات التهيئة * param path */ public TempFileManager (مسار السلسلة) {this.path = path ؛ } / *** ضع الكود الذي يريد مؤشر الترابط تنفيذه في Run ()* / public void run () {system.out.println ("File Management Start ======================================================================================================================================================= DELETEFILES (ملف) ؛ إذا كان (المجلد) (المجلد) {if (folder.delete ()) {system.out.println ("المجلد" i = 0 ؛ التي تلبي المعايير if (CandeLeteFile (file)) {if (file.delete ()) {system.out.println ("file" + file.getName () + "delete bancailed!") ؛ } آخر {system.out.println ("file" + file.getName () + "delete failety! قد يتم استخدام هذا الملف") ؛ }} آخر {}} آخر {system.out.println ("لا يتم حذف ملف") ؛ }} catch (استثناء e) {system.out.println ("فشل الملف =============") ؛ E.PrintStackTrace () ؛ }} / *** حدد ما إذا كان يمكن حذف الملف* / خاص candeletefile (ملف الملف) {date filedate = getFileDate (file) ؛ تاريخ تاريخ = تاريخ جديد () ؛ وقت طويل = (date.getTime () - filedate.getTime ()) / 1000 /60 - integer.parseint (attreence_time) ؛ // الدقائق بين الوقت الحالي والفاصل الزمني للملف // system.out.println ("time =="+time) ؛ if (time> 0) {return true ؛ } آخر {return false ؛ }} / ** * احصل على آخر وقت تعديل للملف * * param file * return * / private date getFileDate (ملف الملف) {long modifiedtime = file.lastmodified () ؛ التاريخ d = تاريخ جديد (modifiedTime) ؛ العودة د ؛ }}حدد ما إذا كان الملف قد تم توقيته ، ويمكن حذف المجلد تلقائيًا إذا تم توقيته.
ما سبق هو كل شيء عن هذا المقال ، آمل أن يكون من المفيد للجميع تعلم برمجة Java.