Java7의 파일 IO는 큰 변화를 겪었으며 많은 새로운 클래스가 구체적으로 소개되었습니다.
import java.nio.file.directorystream; import java.nio.file.filesystem; import java.nio.file.filesystems; import java.nio.file.files; import java.nio.file.file; import java.nio.file.piles; import java.file.file.file.file.file.file java.nio.file.attribute.posixfilepermissions;
...... java.io.file을 기반으로 원래 파일 IO 작동 방법을 바꾸려면 기다리십시오.
1. 경로는 파일을 대체합니다
경로는 계층 적이며 특수 분리기 또는 구분 기자로 분리 된 일련의 디렉토리 및 파일 이름 요소로 구성된 경로를 나타냅니다.
경로는 파일 경로 및 파일을 나타내는 데 사용됩니다. 파일 경로 또는 파일을 나타내는 경로 개체를 구성하는 몇 가지 방법이 있습니다.
1) 우선, 최종 클래스 경로에는 두 가지 정적 방법이 있습니다. 경로 문자열에서 경로 개체를 구성하는 방법 :
Path Path = Paths.get ( "C :/", "XMP"); 경로 path2 = paths.get ( "c :/xmp"); uri u = uri.create ( "파일 : /// c :/xmp/dd"); 경로 p = paths.get (u);
2) 파일 시스템 구성 :
Path Path3 = FileSystems.getDefault (). getPath ( "C :/", "Access.Log");
3) 파일과 경로 사이의 전환, 파일과 URI 간의 변환 :
파일 = 새 파일 ( "c :/my.ini"); Path P1 = file.topath (); p1.tofile (); file.touri ();
4) 파일 만들기 :
경로 target2 = paths.get ( "c : //mystuff.txt"); // set <posixfilepermission> perms = posixfilepermissions.fromstring ( "rw-rw-rw-"); // fileattribute <set <posixfilepermission >> posixfilepermissions.asfileattribute (perms); if (! files.exists (target2)) files.createfile (target2);} catch (ioexception e) {e.printstacktrace ();}RWX 권한을 지정하기 위해 PosixFilePermission은 Windows에서 지원되지 않습니다.
5) files.newbufferedReader는 파일을 읽습니다.
try {// charset.forname ( "gbk") bufferedReader reader = files.newBufferedReader (paths.get ( "c : //my.ini"), Standardcharsets.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)의 입력 길이 = 1 at sun.nio.cs.streamdecoder.implread (streamdecoder.java:339) at sun.nio.cs.streamdecoder.read (streamdecoder.java:178) at java.io.inputStreamReader.read (java.io.bufferedreader.fill (bufferedreader.java:161)에서 at java.io.bufferedReader.Readline (bufferedReader.java:324) at 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 ( "테스트 파일 쓰기 작업"); 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 <path> 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.WalkFileTree를 사용해야합니다
8) 전체 파일 디렉토리를 가로 지르십시오.
public static void main (string [] args)은 ioexception {path statingdir = paths.get ( "c : //apache-tomcat-8.0.21"); List <Path> 결과 = New LinkedList <Path> (); files.walkFileTree (STARTINGDIR, NEW FINDJAVAVISITOR (결과)); System.out.println ( "result.size () =" + result.size ()); } private static class findjavavisitor 확장 SimpleFilevisitor <path> {private list <aThO> 결과; 공개 findjavavisitor (list <path> result) {this.result = result; } @override public filevisitresult visitfile (path file, basicfileattributes attrs) {if (file.tostring (). endswith ( ". java")) {result.add (file.getfilename ()); } return filevisitresult.continue; }}실질적인 예를 들어 봅시다 :
public static void main (string [] args)은 ioexception {path statingdir = paths.get ( "f : // upload // images"); // f : // upload // images // 2 // 20141206 List <ather> result = new LinkedList <aTH> (); files.walkFileTree (STARTINGDIR, NEW FINDJAVAVISITOR (결과)); System.out.println ( "result.size () =" + result.size ()); System.out.println ( "완료"); } private static class findjavavisitor 확장 SimpleFilevisitor <path> {private list <aThO> 결과; 공개 findjavavisitor (list <path> result) {this.result = result; } @override public filevisitresult visitfile (path file, basicfileattributes attrs) {문자열 filepath = file.tofile (). getAbsolutepath (); if (filepath.matches ( ".*_ [1 | 2] {1} //. (? i) (jpg | jpeg | gif | bmp | png)")) {try {files.deleteifexists (file); } catch (ioexception e) {e.printstacktrace (); } result.add (file.getFilename ()); } return filevisitresult.continue; }}디렉토리에서 모든 자격을 갖춘 이미지를 삭제하십시오 : FilePath.matches ( ".*_ [1 | 2] {1} //. (? i) (jpg | jpeg | gif | bmp | png)").
public static void main (string [] args)은 ioexception {path statingdir = paths.get ( "f : // 111111 // upload // images"); // f :/111111 // upload // images // 2 // 20141206 List <ather> result = new LinkedList <aTH> (); files.walkFileTree (STARTINGDIR, NEW FINDJAVAVISITOR (결과)); System.out.println ( "result.size () =" + result.size ()); System.out.println ( "완료"); } private static class findjavavisitor 확장 SimpleFilevisitor <path> {private list <aThO> 결과; 공개 findjavavisitor (list <path> result) {this.result = result; } @override public filevisitresult visitfile (path file, basicfileattributes attrs) {문자열 filepath = file.tofile (). getAbsolutepath (); int 너비 = 224; int 높이 = 300; stringUtils.SubstringBeforElast (FilePath, "."); 문자열 newPath = stringUtils.SubStringbeForElast (Filepath, ".") + "_1." + stringUtils.SubStringAfterLast (FilePath, "."); try {imageUtil.zoomimage (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) 디렉토리 및 파일 작성 :
try {files.createDirectories (paths.get ( "c : // test")); if (! files.get ( "c : // test")) files.createfile (paths.get ( "c : //test/test.txt"); // files.createdirectories (paths.get ( "c : //test/test/test2.txt"));생성 디렉토리 및 파일 파일을 작성하십시오. 디렉토리에서 파일을 만들려면 디렉토리가 있어야합니다.
2) 파일 사본 :
파일에서 파일로 복사 : files.copy (경로 소스, 경로 대상, 카피 옵션 옵션);
입력 스트림에서 파일로 복사 : files.copy (inputStream in, Path Target, CopyOption Options);
파일에서 출력 스트림으로 복사 : files.copy (경로 소스, 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.createdirectories (paths.get ( "c : //test/test2.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 (); 문자열 소유자 = attrs.owner (). getName (); 문자열 perms = 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); // 파일의 권한을 설정합니다
파일 클래스는 단순히 강력하며 파일 및 디렉토리의 거의 모든 관련 속성에는 지원할 원하는 API가 있습니다. 여기에 계속 소개하기에는 너무 게으르다. 자세한 내용은 JDK8의 문서를 참조하십시오.
실용적인 예 :
import 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.piles; public stringtools (public stringtools {Args) {arg void (Args) {arg void void (arg void) {arge = files.newbufferedReader (paths.get ( "c : //members.sql"), Standardcharsets.utf_8); BufferedWriter Writer = files.newbufferedWriter (paths.get ( "c : //members3.txt"), Standardcharsets.utf_8); 문자열 str = null; while (str = reader.readline ())! = null) {if (str! = null && str.indexof ( ", cast (0x")! = -1 && str.indexof ( "as as dateTime)"! = -1) {string newstr = str.substring (0, str.indexof ( ", cast (0x")); Writer.write (Newstr); Writer.newline (); }} writer.flush (); Writer.close (); } catch (예외 e) {e.printstacktrace (); }}}시나리오는 SQL Server가 데이터를 내보내면 데이터가 다음과 같은 16 진이 이진 형식으로 내보내는 것입니다.
따라서 위의 프로그램은 마지막 데이터 시간 필드를 내보내고 DATETIME 필드 값을 포함하지 않는 새 SQL 스크립트를 생성하기 위해 CAST (0x0000A2A500FC2E4F)를 삭제합니다. MySQL로 가져 오는 데 사용됩니다.
반쯤, 실제로는 더 나은 방법이 있습니다. SQL Yog를 사용하면 SQL Server의 테이블과 데이터를 MySQL로 유연하게 가져올 수 있습니다. SQL Server에서 데이터를 내보내는 기능을 사용하는 것은 처리하기가 어렵습니다.
Java 파일 클래스 및 Paths 클래스를 기반으로하는 위의 사용법 (자세한 설명)은 내가 공유하는 모든 컨텐츠입니다. 나는 당신이 당신에게 참조를 줄 수 있기를 바랍니다. 그리고 당신이 wulin.com을 더 지원할 수 있기를 바랍니다.