Java7のファイルIOは大きな変更を受けており、多くの新しいクラスが具体的に導入されています。
java.nio.file.directorystream; Import java.nio.file.filesystem; Import java.nio.file.filesystems; Import java.nio.file.files; Import java.nio.file.path; Import java.nio.file.file.file.pathers; import java.nio.filettribut.paths; java.nio.file.attribute.posixfilepermissions;
......待って、java.io.fileに基づいて元のファイルio操作方法を置き換える。
1。パスはファイルを置き換えます
パスは、階層的で、特別なセパレーターまたは区切り文字によって区切られたディレクトリとファイル名要素のシーケンスで構成されるパスを表します。
パスは、ファイルパスとファイルを表すために使用されます。ファイルパス、またはファイルを表すパスオブジェクトを構築する方法はいくつかあります。
1)まず、最終クラスパスには2つの静的な方法があります。パス文字列からパスオブジェクトを構築する方法:
パスパス= paths.get( "c:/"、 "xmp"); PATH PATH2 = PATHS.GET( "C:/xmp"); uri u = uri.create( "file:/// c:/xmp/dd");パスp = paths.get(u);
2)ファイルシステムの構築:
PATH PATH3 = filesystems.getDefault()。getPath( "c:/"、 "access.log");
3)ファイルとパス間の変換、ファイルとURI間の変換:
file file = new file( "c:/my.ini"); path p1 = file.topath(); p1.tofile(); file.touri();
4)ファイルを作成します。
PATH TARGET2 = PATHS.GET( "c://mystuff.txt"); // set <posixfilepermission> porms = posixfilepermissions.fromstring( "rw-rw-rw-"); // fileattribute <set <set <posixfilepermission >> attrs = astrs.asfileattributions.asfileattribut if(!files.exists(target2))files.createfile(target2);} catch(ioexception e){e.printstacktrace();}RWXアクセス許可を指定するために、WindowsではposixFilePermissionはサポートされていません。
5)files.newbufferedreaderはファイルを読み取ります。
try {// charset.forname( "gbk")bufferedreader reader = files.newbufferedReader(paths.get( "c://my.ini")、stardandcharsets.utf_8);文字列str = null; while((str = reader.readline())!= null){system.out.println(str); }} catch(ioexception e){e.printstacktrace(); }files.newBufferedReaderを使用すると、元のFileInputStream、およびBufferedReaderパッケージよりもはるかに簡単です。
ここで、指定された文字エンコードが正しくない場合、例外がスローされるか、文字化けコードを読み取ることができます。
java.nio.charset.malformedinputexception:java.nio.charset.coderresult.throwexception(coderresult.java:281)at sun.nio.cstramdecoder.implread(streamdecoder.java:339)at java.nio.chaderresult.throwexception(coderresult.java:339)の入力長= 1 sun.nio.cs.streamdecoder.read(streamdecoder.java:178)at java.io.inputstreamreader.read(inputstreamreader.java:184)at java.io.bufferedreader.fill(bufferedreader.java:161)at java.io.bufferedreader.readline(bufferedreader.java:324)at java.io.bufferedreader.readline(bufferedreader.java:389)at com.coin.test.main(test.java:79)
6)ファイルライティング操作:
try {bufferedwriter writer = files.newbufferedwriter(paths.get( "c://my2.ini")、stardandcharsets.utf_8); writer.write( "テストファイル書き込み操作"); writer.flush(); writer.close();} catch(ioexception e1){e1.printstacktrace();}7)フォルダーをトラバースします:
パスdir = paths.get( "d:// webworkspace"); try(DirectoryStream <Ath> Stream = files.NewDirectoryStream(dir)){for(path e:stream){system.out.println(e.getFileName()); }} catch(ioexception e){} try(stream <ath> stream = files.list(paths.get( "c:/"))){iterator <path> item = stream.iterator(); while(ite.hasnext()){path pp = item.next(); System.out.println(pp.getFileName()); }} catch(ioexception e){e.printstacktrace(); }上記は単一のディレクトリを横断することであり、ディレクトリ全体を通過しません。使用する必要があります:files.walkfileetree
8)ファイルディレクトリ全体を通過します。
public static void main(string [] args)throws ioexception {path startingdir = paths.get( "c://apache-tomcat-8.0.21"); list <sath> result = new LinkedList <Path>(); files.walkfiletree(startingdir、new findjavavisitor(result)); system.out.println( "result.size()=" + result.size()); } private static class findjavavisitorはsimplefilevisitor <sath> {private list <path> result> extends public findjavavisitor(list <path> result){this.result = result; } @Override public filevisitResult visitfile(path file、basicfileAttributes attrs){if(file.toString()。endswith( "。java")){result.add(file.getFileName()); } filevisitResult.continueを返します。 }}実用的な例を見てみましょう:
public static void main(string [] args)throws ioexception {path startingdir = paths.get( "f:// upload // images"); // f:// upload // images // 2 // 20141206 list <path> result = new linkedlist <sath>(); files.walkfiletree(startingdir、new findjavavisitor(result)); system.out.println( "result.size()=" + result.size()); System.out.println( "done。"); } private static class findjavavisitorはsimplefilevisitor <sath> {private list <path> result> extends public findjavavisitor(list <path> result){this.result = result; } @Override public filevisitResult visitfile(path file、basicfileattributes attrs){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} //。(?i)(jpg | jpeg | gif | bmp | png)")
public static void main(string [] args)throws ioexception {path startingdir = paths.get( "f:// 111111 // upload // images"); // f:/111111 // upload // images // 2 // 20141206 list <path> result = new linkedlist <path>(); files.walkfiletree(startingdir、new findjavavisitor(result)); system.out.println( "result.size()=" + result.size()); System.out.println( "done。"); } private static class findjavavisitorはsimplefilevisitor <sath> {private list <path> result> extends public findjavavisitor(list <path> result){this.result = result; } @Override public filevisitResult visitfile(path file、basicfileattributes attrs){string filepath = file.tofile()。getabsolutepath(); int width = 224; int height = 300; stringutils.substringbeforeLast(filepath、 "。"); string newpath = stringutils.substringbeforElast(filepath、 "。") + "_1。" + stringutils.substringafterlast(filepath、 "。"); try {imageutil.zoomimage(filepath、newpath、width、height); } catch(ioexception e){e.printstacktrace(); filevisitResult.continueを返します。 } result.add(file.getFileName()); filevisitResult.continueを返します。 }}ディレクトリ内のすべての画像に対して指定されたサイズのサムネイルを生成します。 A.JPGはA_1.jpgを生成します
2。強力なJava.nio.file.files
1)ディレクトリとファイルを作成します。
try {files.createdirectories(paths.get( "c:// test")); if(!files.exists(paths.get( "c:// test")))files.createfile(paths.get( "c://test/test.txt"));作成ディレクトリとファイルfiles.createdirectoriesとfiles.createfileは混合できないことに注意してください。ディレクトリにファイルを作成する前に、ディレクトリが必要です。
2)ファイルコピー:
ファイルからファイルへのコピー:files.copy(パスソース、パスターゲット、コピーオプションオプション);
入力ストリームからファイルへのコピー:files.copy(inputstream in、pathターゲット、コピーオプションオプション);
ファイルから出力ストリームへのコピー:files.copy(path source、outputstream out);
try {files.createdirectories(paths.get( "c:// test")); if(!files.exists(paths.get( "c:// test")))files.createfile(paths.get( "c://test/test.txt")); 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)ファイルのプロパティを読む:
パス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)ファイル権限の読み取りと設定:
パスプロファイル= paths.get( "/home/digdeep/.profile"); posixfileAttributes attrs = files.readattributes(profile、posixfileattributes.class); //ファイルを読み取る許可<posixfilepermissions> posixpermissions = attrs.permissions(); posixpermissions.clear(); string owner = attrs.owner()。getname(); string perms = posixfilepermissions.tostring(posixpermissions); System.out.Format( "%S%S%N"、所有者、パーマ); posixpermissions.add(posixfilepermission.Owner_read); posixpermissions.add(posixfilepermission.group_read); posixpermissions.add(posixfilepermission.others_read); posixpermissions.add(posixfilepermission.Owner_write); files.setposixFilePermissions(プロファイル、posixpermissions); //ファイルの権限を設定します
ファイルクラスは単に強力であり、ファイルとディレクトリのほとんどすべての関連プロパティには、サポートする目的のAPIがあります。詳細については、JDK8のドキュメントを参照してください。
実用的な例:
java.io.bufferedreader; Import java.io.bufferedwriter; Import java.nio.charset.StandArdCharsets; Import java.nio.file.files; Import java.nio.file.path; Import Java.nio.file.file.paths; public strings {public vioid buffs [] reader = files.newbufferedreader(paths.get( "c://members.sql")、stardandcharsets.utf_8); bufferedwriter writer = files.newbufferedwriter(paths.get( "c://members3.txt")、stardandcharsets.utf_8);文字列str = null; while((str = reader.readline())!= null){if(str!= null && str.indexof( "、cast(0x")!= -1 && str.indexof( "as datetime)")!= -1){string newstr = str.substring(0、str.indexof( "、cast(0x)") + ")") writer.write(newtr); writer.newline(); }} writer.flush(); writer.close(); } catch(Exception e){e.printstacktrace(); }}}シナリオは、SQL Serverがデータをエクスポートする場合、データタイムは次のような16進バイナリ形式にエクスポートされることです。
したがって、上記のプログラムは、最後のデータタイムフィールドをエクスポートし、キャスト(0x0000A2A500FC2E4FとしてDateTimeとして)を削除して、DateTimeフィールド値を含まない新しいSQLスクリプトを生成します。 MySQLにインポートするために使用されます。
途中で、実際にはより良い方法があります。 SQL Yogを使用すると、SQL ServerのテーブルとデータをMySQLに柔軟にインポートできます。 SQL Serverからデータをエクスポートする機能を使用すると、対処が困難です。
Java Filesクラスとパスクラスに基づく上記の使用法(詳細な説明)は、私があなたと共有するすべてのコンテンツです。参照を提供できることを願っています。wulin.comをもっとサポートできることを願っています。