خضع الملف IO في Java7 لتغييرات كبيرة ، وتم تقديم العديد من الفصول الجديدة على وجه التحديد:
استيراد java.nio.file.directorystream ؛ استيراد java.nio.file.filesystem ؛ استيراد java.nio.file.filesystems ؛ import java.nio.file.files java.nio.file.attribute.posixfilePermissions ؛
...... انتظر ، لاستبدال طريقة تشغيل الملف الأصلي IO استنادًا إلى java.io.file.
1. المسار يحل محل الملف
يمثل المسار مسارًا هرميًا ويتألف من سلسلة من عناصر الدليل واسم الملف مفصولة بفاصل خاص أو محدد.
يتم استخدام المسار لتمثيل مسارات الملفات والملفات. هناك عدة طرق لإنشاء كائن مسار لتمثيل مسار الملف ، أو ملف:
1) أولاً وقبل كل شيء ، هناك طريقتان ثابتتان لمسارات الطبقة النهائية. كيفية بناء كائن مسار من سلسلة مسار:
path path = paths.get ("C:/" ، "XMP") ؛ path path2 = paths.get ("c:/xmp") ؛ uri u = uri.create ("file: /// c:/xmp/dd") ؛ path p = paths.get (u) ؛2) بناء أنظمة الملفات:
path 3 = fileystems.getDefault (). getPath ("C:/" ، "Access.log") ؛3) التحويل بين الملف والمسار ، والتحويل بين الملف و URI:
ملف الملف = ملف جديد ("c: /my.ini") ؛ path p1 = file.topath () ؛ p1.tofile () ؛ file.touri () ؛4) إنشاء ملف:
path target2 = paths.get ("c: //mystuff.txt") ؛ // set <OpsixFilePermission> perms = posixfilePermissions.fromString ("rw-rw-rw-") if (! files.exists (target2)) files.createfile (target2) ؛} catch (ioException e) {E.PrintStackTrace () ؛}لا يتم دعم PosixFilePermission في Windows لتحديد أذونات RWX.
5) files.newbufferedreader يقرأ الملف:
حاول {// charset.forname ("gbk") bufferreader reader = files.newbufferedreader (paths.get ("c: //my.ini") ، standardcharsets.utf_8) ؛ سلسلة str = null ؛ بينما ((str = reader.readline ())! = null) {system.out.println (str) ؛ }} catch (ioException e) {E.PrintStackTrace () ؛ }يمكنك أن ترى أن استخدام Files.NewBufferedReader أسهل بكثير من FileInputStream الأصلي ثم حزمة Bufferreader.
هنا ، إذا كان ترميز الأحرف المحدد غير صحيح ، فقد يتم طرح استثناء ، أو قد يتم قراءة رمز مشتعلة:
java.nio.charset.malformedInputException: طول الإدخال = 1 في java.nio.charset.coderresult.throwexception (coderresult.java:281) في sun.nio.cs.streamdecoder.implread (StreamDecoder.java:339) sun.nio.cs.streamdecoder.read (StreamDecoder.Java:178) في java.io.inputstreamreader.read (inputstreamreader.java:184) في java.io.buffufudreader.fill (bufferedreader.java:161) at java.io.bufferedreader.readline (BufferedReader.java:324) في java.io.bufferedreader.readline (bufferedreader.java:389) في com.coin.test.main (test.java:79)
6) عملية كتابة الملفات:
حاول {bufferedWriter Writer = files.newBufferedWriter (paths.get ("c: //my2.ini") ، standardcharsets.utf_8) ؛ Writer.write ("اختبار ملف كتابة ملف") ؛ الكاتب. flush () ؛ الكاتب.7) اجتياز مجلد:
path dir = paths.get ("d: // webworkspace") ؛ TREE (DIRECTORYSTEAM <TATH> Stream = files.newdirectorystream (dir)) {for (path e: dream) {system.out.println (e.getFilename ()) ؛ }} catch (ioException e) {} TREE (DETRE <PATH> DTREAM = files.list (paths.get ("c:/"))) {iterator <path> item = dream.iterator () ؛ بينما (ite.hasnext ()) {path pp = item.next () ؛ System.out.println (pp.getFilename ()) ؛ }} catch (ioException e) {E.PrintStackTrace () ؛ }ما سبق هو اجتياز دليل واحد ، فهو لا يعبر الدليل بأكمله. تحتاج إلى استخدام: files.walkfiletree
8) اجتياز دليل الملف بأكمله:
يبرز الفراغ الثابت العام (السلسلة [] args) ioException {path startDir = paths.get ("c: //apache-tomcat-8.0.21") ؛ قائمة <Path> result = New LinkedList <Path> () ؛ files.walkfiletree (startDir ، new findjavavisitor (result)) ؛ system.out.println ("result.size () =" + result.size ()) ؛ } الفئة الثابتة الخاصة FindJavavisitor تمتد SimpleFileVisitor <Path> {Private List <Path> result ؛ public findjavavisitor (قائمة <That> النتيجة) {this.result = result ؛ } Override Public FileVisitResult VisitFile (ملف المسار ، سمات BasicFiLeAttributes) {if (file.toString (). endswith (". } إرجاع fileVisitResult.Continue ؛ }}لنأخذ مثالًا عمليًا:
يبرز الفراغ الثابت العام (سلسلة [] args) ioException {path startDir = paths.get ("f: // upload // images") ؛ // f: // upload // images // 2 // 20141206 list <Path> result = new LinkedList <Path> () ؛ files.walkfiletree (startDir ، new findjavavisitor (result)) ؛ system.out.println ("result.size () =" + result.size ()) ؛ System.out.println ("Done.") ؛ } الفئة الثابتة الخاصة FindJavavisitor تمتد SimpleFileVisitor <Path> {Private List <Path> result ؛ public findjavavisitor (قائمة <That> النتيجة) {this.result = result ؛ } Override Public FileVisitResult VisitFile (ملف المسار ، سمات BasicFiLeAttributes) {String filePath = file.tofile (). getabsolutepath () ؛ if (filepath.matches (".*_ [1 | 2] {1} //. (؟ } catch (ioException e) {E.PrintStackTrace () ؛ } result.add (file.getFilename ()) ؛ } إرجاع fileVisitResult.Continue ؛ }}احذف جميع الصور المؤهلة في الدليل: filepath.matches (".*_ [1 | 2] {1} //. (؟
يبرز الفراغ الثابت العام (سلسلة [] args) ioException {path segringdir = paths.get ("f: // 111111 // upload // images") ؛ // f:/111111 // expload // images // 2 // 20141206 list <Path> result = new LinkedList <Path> () ؛ files.walkfiletree (startDir ، new findjavavisitor (result)) ؛ system.out.println ("result.size () =" + result.size ()) ؛ System.out.println ("Done.") ؛ } الفئة الثابتة الخاصة FindJavavisitor تمتد SimpleFileVisitor <Path> {Private List <Path> result ؛ public findjavavisitor (قائمة <That> النتيجة) {this.result = result ؛ } Override Public FileVisitResult VisitFile (ملف المسار ، سمات BasicFiLeAttributes) {String filePath = file.tofile (). getabsolutepath () ؛ عرض int = 224 ؛ ارتفاع int = 300 ؛ StringUtils.substringBeforelast (filepath ، ".") ؛ String newPath = stringUtils.substringBeforelast (filepath ، ".") + "_1." + StringUtils.subStringAfterLast (FilePath ، ".") ؛ جرب {imageUtil.zoomAmage (FilePath ، NewPath ، العرض ، الارتفاع) ؛ } catch (ioException e) {E.PrintStackTrace () ؛ إرجاع fileVisitResult.Continue ؛ } result.add (file.getFilename ()) ؛ إرجاع fileVisitResult.Continue ؛ }}يولد صورة مصغرة للحجم المحدد لجميع الصور في الدليل. A.JPG يولد A_1.JPG
2. java.nio.file.files
1) إنشاء الدلائل والملفات:
جرب {files.createdIrectories (paths.get ("c: // test")) ؛ if (! files.exists (paths.get ("c: // test"))))لاحظ أنه لا يمكن خلط دليل الإنشاء وملفات الملفات. يجب أن يكون لديك دليل قبل أن تتمكن من إنشاء ملفات في الدليل.
2) نسخة الملف:
نسخ من ملف إلى ملف: files.copy (مصدر المسار ، هدف المسار ، خيارات copyOption) ؛
انسخ من دفق الإدخال إلى الملف: files.copy (inputStream in ، هدف المسار ، خيارات copyOption) ؛
نسخ من ملف إلى دفق الإخراج: files.copy (مصدر المسار ، OutputStream Out) ؛
جرب {files.createdIrectories (paths.get ("c: // test")) ؛ if (! files.exists (paths.get ("c: // test"))) files.createfile (paths.get ("c: //test/test.txt") ؛ // files.createdirectories (paths.get ("c: //test/test2txt")) ؛ files.copy (paths.get ("c: //my.ini") ، system.out) ؛ files.copy (paths.get ("c: //my.ini") ، paths.get ("c: //my2.ini") ، standardcopyoption.replace_existing) ؛ files.copy (system.in ، paths.get ("c: //my3.ini") ، standardcopyoption.replace_existing) ؛} catch (ioException e) {E.PrintStackTrace () ؛}3) التكرار من خلال دليل ومجلد. تم تقديمه أعلاه: files.newdirectorystream ، files.walkfiletree
4) قراءة خصائص الملف:
path zip = paths.get (uri) ؛ System.out.println (files.getLastModifiedTime (zip)) ؛ System.out.println (files.size (zip)) ؛ System.out.println (files.issymbolicLink (zip)) ؛ System.out.println (files.isdirectory (zip)) ؛ System.out.println (files.ReadatTributes (zip ، "*")) ؛
5) قراءة وضبط أذونات الملف:
profile profile = paths.get ("/home/digdeep/.profile") ؛ posixfileAttributes attrs = files.readattributes (ملف تعريف ، posixfileAttributes.class) ؛ // إذن لقراءة الملفات تعيين <SposixFilePermissions> posixpermissions = attrs.permissions () ؛ posixpermissions.clear () ؛ string owner = attrs.onner (). getName () ؛ perms string = posixfilePermissions.ToString (posixpermissions) ؛ system.out.format ("٪ s ٪ s ٪ n" ، المالك ، perms) ؛ posixpermissions.add (posixfilePermission.Owner_Read) ؛ posixpermissions.add (posixfilePermission.group_read) ؛ posixpermissions.add (posixfilePermission.others_read) ؛ posixpermissions.add (posixfilePermission.Owner_Write) ؛ files.setposixfilePermissions (ملف تعريف ، posixpermissions) ؛ // تعيين أذونات الملففئة الملفات هي ببساطة قوية ، وجميع خصائص الملفات والأدلة ذات الصلة تقريبًا لديها واجهة برمجة التطبيقات المطلوبة لدعمها. أنا كسول جدًا لمواصلة تقديمه هنا ، يرجى الرجوع إلى وثائق JDK8 للحصول على التفاصيل.
مثال عملي:
استيراد java.io.bufferedreader ؛ استيراد java.io.bufferedWriter ؛ استيراد java.nio.charset.standardCharsets ؛ استيراد java.nio.file.files ؛ import java.nio.file.path BufferedReader Reader = files.newbufferedReader (paths.get ("c: //members.sql") ، standardcharsets.utf_8) ؛ bufferedWriter Writer = files.newbufferedWriter (paths.get ("c: //members3.txt") ، standardcharsets.utf_8) ؛ سلسلة str = null ؛ بينما ((str = reader.readline ())! = null) {if (str! = null && str.indexof ("، cast (0x")! = -1 && str.indexof ("as dateTime)")! Writer.write (NewStr) ؛ الكاتب. newline () ؛ }} constr.flush () ؛ الكاتب. } catch (استثناء e) {E.PrintStackTrace () ؛ }}}السيناريو هو أنه عندما يقوم SQL Server بتصدير بيانات ، سيتم تصدير Datatime إلى تنسيق ثنائي سداسي عشري ، مثل: CAST (0x0000A2A500FC2E4F AS DateTime))
لذلك ، يقوم البرنامج أعلاه بتصدير حقل Datatime الأخير ، يحذف CAST (0x0000A2A500FC2E4F كـ DATETIME) لإنشاء برنامج نصي SQL جديد لا يحتوي على قيمة حقل DateTime. تستخدم للاستيراد إلى mySQL.
في منتصف الطريق ، هناك في الواقع طريقة أفضل. يمكن باستخدام SQL YOG استيراد الجداول والبيانات بمرونة في SQL Server إلى MySQL. من الصعب التعامل مع وظيفة تصدير البيانات من SQL Server.
الاستخدام المذكور أعلاه (التفسير التفصيلي) استنادًا إلى فئة ملفات Java ومسارات المسارات هو كل المحتوى الذي أشاركه معك. آمل أن تتمكن من إعطائك مرجعًا وآمل أن تتمكن من دعم wulin.com أكثر.