استخدم وضع Iterator ووضع المركب لتنفيذ نقرة واحدة للتصدير والتنزيل إلى zip ملفات حزمة مضغوطة في المتصفح
بسبب احتياجات المشروع ، تذكرت نمط التصميم الذي رأيته من قبل ، لذلك كان لدي فكرة عن التصدير بنقرة واحدة.
الفكرة بسيطة وواضحة. فقط شاهدها خطوة بخطوة.
1. إنشاء كائن مركب
الفئة التجريدية العامة fileComponent { / ** * الوصف: إنشاء مجلد أو ملف * / public void mkfile () {رمي جديد غير مدعوم جديد () ؛ } / ** * الوصف: احصل على مسار إدخال الملف * / السلسلة العامة getInPath () {رمي جديد غير مدعوم جديد () ؛ } / ** * الوصف: احصل على مسار إخراج الملف * / السلسلة العامة getoutpath () {رمي جديد غير مدعوم جديد () ؛ } / *** الوصف: للمجلدات ، يمكنك إضافة مجلدات أو ملفات أخرى* / void public add (fileComponent fileComponent) {رمي جديد غير مدعوم }}يمكن أن يكون كائن المزيج هذا كائن مجلد أو كائن ملف معين. في المكالمة اللاحقة ، ليست هناك حاجة لمعرفة ما إذا كان مجلد أو ملف (أي شفافية وضع المركب).
2. تنفيذ فئة مجردة الكائن المركب
تنفيذ الفئة المجردة أعلاه كما يلي:
الفئة العامة ZipFileItem يمتد fileComponent {// مسار ملف الإدخال inpath ؛ // مسار إخراج ملف سلسلة OutPath ؛ // قائمة معلومات ملف subnode <FileComponent> fileComponents = new ArrayList <FileComponent> () ؛ // يمكن أن يكون inpath null public zipfileItem (String OutPath) {this.outPath = OutPath ؛ } // مسار الدليل المصدر للملف المضغوط وموقع الهدف المضغوط العام ZipfileItem (String Inpath ، String OutPath) {this.inpath = inpath ؛ this.outpath = outpath ؛ } public void add (fileComponent fileComponent) {fileComponents.add (fileComponent) ؛ } إزالة الفراغ العام (fileComponent fileComponent) {fileComponents.Remove (fileComponent) ؛ } Override public string getInPath () {return INPath ؛ } Override public string getOutPath () {return outpath ؛ } Override public void mkfile () {fileUtils.createfile (inPath ، OutPath) ؛ iterator <FileComponent> iterator = fileComponents.iterator () ؛ // إذا كان مجلد ، فيمكنك أيضًا التكرار عبر الملف وكائن الملف المحدد في الكائن بينما (iterator.hasNext ()) {fileComponent fileComponent = iterator.next () ؛ fileComponent.mkfile () ؛ }}}3. فئة أداة الملفات
Public Class ConferenceFileUtils { /** * الوصف: قم بإنشاء ملف في مسار الإخراج المطلق بناءً على المسار المطلق للملف * param inpath path. إذا كنت ترغب في إنشائها بناءً على ملف موجود ، فيجب عليك تمرير مسار الإخراج OutPath * param. إذا كان دليلًا ، فأنت لا تستخدم */ public static void createFile (string inpath ، string outpath) {file filein = new file (inPath) ؛ ملف fileOut = ملف جديد (OutPath) ؛ // إذا كان الملف الهدف موجودًا بالفعل ، فتجاهله إذا لم يكن الملف موجودًا. ثم إنشاء if (! fileOut.exists ()) {int lastseparator = outpath.lastindexof (file.separator) ؛ String lastpart = OutPath.SubString (LastSeparator) ؛ // إذا لم يكن المجلد ، فقم بإنشاء ملف if (lastPart.lastIndexof (".")! =-1) {loggerUtil.info ("------------ make concretefile -------------"+OutPath) ؛ FileInputStream في = null ؛ fileOutputStream Out = null ؛ دليل الملف = فارغ ؛ Try {Directory = new file (OutPath.SubString (0 ، lastSeparator+1)) ؛ DIRECTORY.MKDIRS () ؛ out = fileOutputStream جديد (fileOut) ؛ // إذا كان الملف المصدر موجودًا إذا (filein.exists ()) {في = جديد fileInputStream (filein) ؛ int len ؛ Byte [] buf = new byte [10240] ؛ بينما ((len = in.read (buf))> 0) {out.write (buf ، 0 ، len) ؛ } out.close () ؛ in.close () ؛ في = خالية ؛ }} catch (ioException e) {system.err.println ("فشل إنشاء ملف!" ، e) ؛ }} // إذا كان مجلد ، قم بإنشاء مجلد. إذا لم يكن مجلد الفئة الأصل موجودًا ، فقم بإنشاء { System.err.println ("---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Boolean Success = DELETEDIR (DIR ، الأطفال [i]) ؛ في = null ؛ (IoException e) {رمي iOexception (e) ؛4. رمز منطق التصدير الأساسي
الطبقة العامة esportmatertoziptemplate {resource private rerichfileleevelsservice rerichfilelelefelsservice ؛ // اسم مجلد الدليل الجذري أو تنزيل اسم ملف المتصفح السلسلة الخاصة downloadzipName ؛ // عنوان دليل الجذر السلسلة الخاصة SavePath = "D: // tempfile" ؛ // Root Directory Path Private Superrootpath ؛ // جذر دليل كائن FileComponent الخاص ؛ // معلمة الأعمال DTO Private ExportallTheMaterialDTO Paramdto ؛ // استجابة الاستجابة الخاصة httpservletresponse ؛ public ordermaterialtoziptemplate (orportalltheMaterialDto paramdto ، rerichfilelelefelsservice rerichfilelelefelsservice ، httpservletresponse) {this.downloadzipName = paramdto.getDownloadzipName () ؛ this.paramdto = paramdto ؛ this.reSponse = الاستجابة ؛ this.enrichfilelelefelsservice = rerichfilelelevelsservice ؛ this.superrootpath = savepath+file.separator+downloadzipName ؛ this.superroot = new ZipfileItem (superrootpath) ؛ } // 1. قم بتغليف دليل الجذر الخاص المضيء الخاص () {incrichfilelefileSservice.enrichfilelevels (superroot ، superrootpath ، paramdto) ؛ } // 2. قم بإنشاء مستوى دليل الملفات ، أي إنشاء جميع الملفات (بما في ذلك المجلدات) private void createallthefiles () {if (null! = superroot) {superroot.mkfile () ؛ }} // 3. بعد إنشاء مستوى الملف ، ثم اضغطه وقم بتنزيله على Browser private void prespresandDownload () {file srcfile = new file (fortifyutil.filterfilename (superrootpath)) ؛ String TargetFilePath = SavePath+file.separator+srcfile.getName ()+". zip" ؛ ملف TargetFile = ملف جديد (FortifyUtil.FilterFilename (TargetFilePath)) ؛ zipfileutil.zipfiles (srcfile ، targetfile) ؛ حاول {// compress file path string string downfilename = downloadzipName+". zip" ؛ استجابة. reset () ؛ // تحديد نوع الإخراج. استجابة. outputfileutil.outputfile (TargetFile ، Response) ؛ // حذف المجلد المخزن مؤقتًا إذا (srcfile.exists ()) {conferencefileutils.deletedir (srcfile) ؛ } // حذف الحزمة المضغوطة المؤقتة if (targetfile.exists ()) {targetfile.delete () ؛ }} catch (ioException e) {devlog.error (e.getMessage ()) ؛ }} // One-clich Export ، وضع المظهر public void export () {rerichfilelefels () ؛ CreatealLtheFiles () ؛ lempresandDownload () ؛ }}5. إثراء واجهات على مستوى الملف
الواجهة العامة إثراء rerichfilelefilevelsservice {public void rerichfilelelevels (FileComponent superroot ، String superrootpath ، orportallthematerialdto paramdto) ؛} في سيناريوهات الأعمال المختلفة ، قم فقط بتنفيذ هذه الواجهة ، وتنفيذ طريقة الإثراء () ، وقم بتمرير مثيل الفئة الذي يمنع هذه الواجهة إلى طريقة مُنشئ فئة التصدير ، ثم استدعاء طريقة التصدير () للتصدير لمثيل فئة التصدير. الآن
تصدير جديد toziptemplate (dtoparams ،
recichfilelelevelsservice ، استجابة) .export () ؛
ما سبق هو كل محتوى هذه المقالة. آمل أن يكون ذلك مفيدًا لتعلم الجميع وآمل أن يدعم الجميع wulin.com أكثر.