SlideShare a Scribd company logo
1 of 31
Download to read offline
NIO.2 を使って、
簡単ファイル操作

              Java in the Box
              櫻庭 祐一
                 #jt12_s104
Agenda
      JSR 51 New I/O APIs
JSR 203 More New I/O APIs
       New Filesystem API
              Conclusion
JSR 51 New I/O APIs
    Buffer/Direct Buffer

              Channel
Non-Blocking I/O

    Charset

 Regular Expression

                           Mark Reinhold
JSR 51 New I/O APIs
    Buffer/Direct Buffer
                        り !
                あ
              Channel
              し
      残
Non-Blocking I/O
    み
積   Charset

 Regular Expression

                           Mark Reinhold
An API for scalable I/O operations
  on both files and sockets, in the form of
  either asynchronous requests
  or polling



A new filesystem interface that supports
bulk access to file attributes (including MIME content types),
escape to filesystem-specific APIs,
and a service-provider interface for pluggable filesystem
implementations.



                                          Mark Reinhold
JSR 203 More New I/O APIs
    Asynchronous I/O


     New Filesystem Interface


Multicast with SocketChannel


                               Alan Bateman
コピーなどの基本操作


      Why Now?
foo.txt

作成日などのメタデータ     ディレクトリの探索
<<factory>>
FileSystems


              <<interface>>
FileSystem       Path         Files




                      Basic Classes
Instantiation
// 物理的なファイルシステム
FileSystem fileSystem = FileSystems.getDefault();

// foo.txt に対応するパスの生成
Path foo = fileSystem.getPath("foo.txt");

// baz/bar/foo.txt に対応するパスの生成
Path foo2 = fileSystem.getPath("baz", "bar", "foo.txt");

// foo.txt に対応するパスの簡易的な生成
Path foo3 = Paths.get("foo.txt");
Instantiation
FileSystem fileSystem = FileSystems.getDefault();
Path jarfile = fileSystem.getPath("someapp.jar");

// someapp.jar に対応する FileSystem オブジェクトを取得する
FileSystem jarFileSystem
    = FileSystems.newFileSystem(jarfile,
                     ClassLoader.getSystemClassLoader());
    << 処理 >>

// クローズ
jarFileSystem.close();
Conversion

File file = ...;

// File から Path
Path path = file.toPath();

// Path から File
File file2 = path.toFile();
Creation
// 空のファイルを生成
Path path = fileSystem.getPath("foo.txt");
Files.createFile(path);

// ディレクトリを生成
Path dir = fileSystem.getPath("bar");
Files.createDirectory(dir);

// ディレクトリツリーを生成
Path dir2 = fileSystem.getPath("baz", "quux");
Files.createDirectories(dir2);
Link Creation

// ハードリンクの作成
Path target = fileSystem.getPath("foo.txt");
Path link = fileSystem.getPath("bar.txt");
Files.createLink(link, target);

// シンボリックリンクの生成
Path symLink = fileSystem.getPath("baz.txt");
Files.createSymbolicLink(symLink, target);
Operations
Path src = fileSystem.getPath(...);
Path dest = fileSystem.getPath(...);

// File Copy
Files.copy(src, dest);

// Move
Files.move(src, dest);

// Delete
Files.delete(dest);
Files.deleteIfExists(dest);
Input/Output
Path path = ...;   Charset charset = ...;
// Reader/Wirter
BufferedReader reader
    = Files.newBufferedReader(path, charset);
BufferedWriter writer
    = Files.newBufferedWriter(path, charset);
// Stream
InputStream iStream = Files.newInputStream(path);
OutputStream oStream = Files.newOutputStream(path);

// Channel
SeekableByteChannel channel = Files.newByteChannel(path);
Simple Input/Output
Path path = ...; Charset charset = ...;

// 簡易入力
byte[] bytes = Files.readAllBytes(path);
List<String> lines = Files.readAllLines(path, charset);

// 簡易出力
Files.write(path, bytes);
Files.write(path, lines, charset);
Metadata   foo.txt
Two ways
  for dealing with Metadata

             Calling
               Files methods
 Through
   AttributeView
     interface
Metadata
Path path = ...;

// オーナー
UserPrincipal owner = Files.getOwner(path);
// 最終更新日時
FileTime modifyDate = Files.getLastModifiedTime(path);


// 作成日時
FileTime creatDate
    = (FileTime)Files.getAttribute(path,
                                   "creationTime");
AttributeView
      <<interface>>              <<interface>>
     AttributeView            FileAttributeView

     <<interface>>
BasicFileAttributeView
                         <<interface>>
                     AclFileAttributeView
                                  <<interface>>
                           FileOwnerAttributeView


    <<interface>>              <<interface>>
DosFileAttributeView PosixFileAttributeView
AttributeView
Path path = ...;

BasicFileAttributeView view
    = Files.getFileAttributeView(path,
                       BasicFileAttributeView.class);

// アトリビュートを保持するのは BasicFileAttribute
BasicFileAttributes attributes
            = view.readAttributes();

// アトリビュートの取得
FileTime creationTime = attributes.creationTime();
FileTime lastAccessTime = attributes.lastAccessTime();
Walk Through
Directory Tree
by Visitor Pattern
<<interface>>
  FileVisitor
preVisitDirectory
postVisitDirectory
visitFile
visitFileFailed
1. preVisitDirectory   alpha 11. postVisitDirectory

      2. preVisitDirectory
                     bravo 8. preVisitDirectory charlie 10. postVisitDirectory
                             7. postVisitDirectory


3. visitFile   bar.txt       delta                   baz.txt 9. visitFile

         4. preVisitDirectory     6. postVisitDirectory

                                                               <<interface>>
                             foo.txt
                                                                FileVisitor
                            5. visitFile                     preVisitDirectory
                                                             postVisitDirectory
                                                             visitFile
                                                             visitFileFailed
File Search
Path startDir = Paths.get(".");
final String regex = "Test.java";

Files.walkFileTree(startDir,
                   new SimpleFileVisitor<Path>() {
    public FileVisitResult visitFile(Path path,
                           BasicFileAttributes attrs) {
        if (Pattern.matches(regex,
                     path.getFileName().toString())) {
            System.out.println("File: " + path);
        }
        return FileVisitResult.CONTINUE;
    }
});
Directory Watch

                  File/Directory
                     Creation
                     Delete
                     Update
Directory Watch

Path targetDir = fileSystem.getPath(...);

// WatchService オブジェクトの生成
WatchService watcher = fileSystem.newWatchService();

// ディレクトリに WatchService オブジェクトを登録
targetDir.register(watcher,
                   StandardWatchEventKinds.ENTRY_CREATE,
                   StandardWatchEventKinds.ENTRY_DELETE,
                   StandardWatchEventKinds.ENTRY_MODIFY);
Directory Watch
while(...) {
    // 現在のイベントを取得
    WatchKey key = watcher.take();

     for (WatchEvent<?> event: key.pollEvents()) {
         // イベントの種類と対象となるパスを出力
         System.out.println(event.kind()
                            + " " + event.context());
     }
     key.reset();
}
Conclusion
    JSR 203 More New I/O
       New Filesystem Interface
         Asyn I/O
          Multicast
New Filesystem Interface



              foo.txt
References

  ITpro Java SE 7 徹底理解
第 4 回 New I/O 2 の
      新しいファイルシステムインタフェース その 1
  http://itpro.nikkeibp.co.jp/article/COLUMN/20110725/362803/

第 5 回 New I/O 2 の
      新しいファイルシステムインタフェース その 2
  http://itpro.nikkeibp.co.jp/article/COLUMN/20110830/367909/

第 6 回 New I/O 2 で非同期 I/O
  http://itpro.nikkeibp.co.jp/article/COLUMN/20110927/369451/
使っ て、
NIO .2 を     操作
        ァイ ル
  簡単  フ


                    eB ox
                in th
          Ja va     一
              庭   祐
            櫻

More Related Content

What's hot

Log4j 2 source code reading
Log4j 2 source code readingLog4j 2 source code reading
Log4j 2 source code readingGo Tanaka
 
CLT-012_インサイド UWP アプリ
CLT-012_インサイド UWP アプリCLT-012_インサイド UWP アプリ
CLT-012_インサイド UWP アプリdecode2016
 
Javaセキュアコーディングセミナー東京第3回講義
Javaセキュアコーディングセミナー東京第3回講義Javaセキュアコーディングセミナー東京第3回講義
Javaセキュアコーディングセミナー東京第3回講義JPCERT Coordination Center
 
Couchbase MeetUP Tokyo - #11 Omoidenote
Couchbase MeetUP Tokyo - #11 OmoidenoteCouchbase MeetUP Tokyo - #11 Omoidenote
Couchbase MeetUP Tokyo - #11 Omoidenotekitsugi
 
「Html sql」で図書館hpにアクセスしてみよう
「Html sql」で図書館hpにアクセスしてみよう「Html sql」で図書館hpにアクセスしてみよう
「Html sql」で図書館hpにアクセスしてみようKentaro Matsui
 
Rails初心者レッスン lesson5 2edition
Rails初心者レッスン lesson5 2editionRails初心者レッスン lesson5 2edition
Rails初心者レッスン lesson5 2editionSatomi Tsujita
 
[Alfresco]ドキュメントライブラリのUIカスタマイズ
[Alfresco]ドキュメントライブラリのUIカスタマイズ[Alfresco]ドキュメントライブラリのUIカスタマイズ
[Alfresco]ドキュメントライブラリのUIカスタマイズJun Terashita
 
Alfrescoのカスタムテーブルの使い方
Alfrescoのカスタムテーブルの使い方Alfrescoのカスタムテーブルの使い方
Alfrescoのカスタムテーブルの使い方Jun Terashita
 
omoon.org の裏側 〜FuelPHP の task 活用例〜
omoon.org の裏側 〜FuelPHP の task 活用例〜omoon.org の裏側 〜FuelPHP の task 活用例〜
omoon.org の裏側 〜FuelPHP の task 活用例〜Sotaro Omura
 
OpenStack Study#9 JOSUG
OpenStack Study#9 JOSUGOpenStack Study#9 JOSUG
OpenStack Study#9 JOSUGHideki Saito
 
debugging server with strace
debugging server with stracedebugging server with strace
debugging server with straceYoshinari Takaoka
 

What's hot (12)

Log4j 2 source code reading
Log4j 2 source code readingLog4j 2 source code reading
Log4j 2 source code reading
 
CLT-012_インサイド UWP アプリ
CLT-012_インサイド UWP アプリCLT-012_インサイド UWP アプリ
CLT-012_インサイド UWP アプリ
 
Javaセキュアコーディングセミナー東京第3回講義
Javaセキュアコーディングセミナー東京第3回講義Javaセキュアコーディングセミナー東京第3回講義
Javaセキュアコーディングセミナー東京第3回講義
 
Couchbase MeetUP Tokyo - #11 Omoidenote
Couchbase MeetUP Tokyo - #11 OmoidenoteCouchbase MeetUP Tokyo - #11 Omoidenote
Couchbase MeetUP Tokyo - #11 Omoidenote
 
Fluentdの使い方
Fluentdの使い方Fluentdの使い方
Fluentdの使い方
 
「Html sql」で図書館hpにアクセスしてみよう
「Html sql」で図書館hpにアクセスしてみよう「Html sql」で図書館hpにアクセスしてみよう
「Html sql」で図書館hpにアクセスしてみよう
 
Rails初心者レッスン lesson5 2edition
Rails初心者レッスン lesson5 2editionRails初心者レッスン lesson5 2edition
Rails初心者レッスン lesson5 2edition
 
[Alfresco]ドキュメントライブラリのUIカスタマイズ
[Alfresco]ドキュメントライブラリのUIカスタマイズ[Alfresco]ドキュメントライブラリのUIカスタマイズ
[Alfresco]ドキュメントライブラリのUIカスタマイズ
 
Alfrescoのカスタムテーブルの使い方
Alfrescoのカスタムテーブルの使い方Alfrescoのカスタムテーブルの使い方
Alfrescoのカスタムテーブルの使い方
 
omoon.org の裏側 〜FuelPHP の task 活用例〜
omoon.org の裏側 〜FuelPHP の task 活用例〜omoon.org の裏側 〜FuelPHP の task 活用例〜
omoon.org の裏側 〜FuelPHP の task 活用例〜
 
OpenStack Study#9 JOSUG
OpenStack Study#9 JOSUGOpenStack Study#9 JOSUG
OpenStack Study#9 JOSUG
 
debugging server with strace
debugging server with stracedebugging server with strace
debugging server with strace
 

Similar to NIO.2を使って簡単ファイル操作

File API: Writer & Directories and System
File API: Writer & Directories and SystemFile API: Writer & Directories and System
File API: Writer & Directories and SystemTaku AMANO
 
明日から使える Java SE 7
明日から使える Java SE 7明日から使える Java SE 7
明日から使える Java SE 7Yuichi Sakuraba
 
2019-10-18 JXUG Xamarin.Essentials - #3 File System Helpers
2019-10-18 JXUG Xamarin.Essentials - #3 File System Helpers2019-10-18 JXUG Xamarin.Essentials - #3 File System Helpers
2019-10-18 JXUG Xamarin.Essentials - #3 File System HelpersTakeshi Fujimoto
 
Alfresco勉強会20120829: やさしいShareダッシュレットの作り方
Alfresco勉強会20120829: やさしいShareダッシュレットの作り方Alfresco勉強会20120829: やさしいShareダッシュレットの作り方
Alfresco勉強会20120829: やさしいShareダッシュレットの作り方linzhixing
 
Hive undocumented feature
Hive undocumented featureHive undocumented feature
Hive undocumented featuretamtam180
 
分散ストリーム処理フレームワーク Apache S4
分散ストリーム処理フレームワーク Apache S4分散ストリーム処理フレームワーク Apache S4
分散ストリーム処理フレームワーク Apache S4AdvancedTechNight
 
Spring Framework ふりかえりと4.3新機能
Spring Framework ふりかえりと4.3新機能Spring Framework ふりかえりと4.3新機能
Spring Framework ふりかえりと4.3新機能kimulla
 
Node-v0.12の新機能について
Node-v0.12の新機能についてNode-v0.12の新機能について
Node-v0.12の新機能についてshigeki_ohtsu
 
XML と PHP のイケナイ関係 (セキュリティ的な意味で) -Introduction of XXE attack and XML Bomb with...
XML と PHP のイケナイ関係 (セキュリティ的な意味で) -Introduction of XXE attack and XML Bomb with...XML と PHP のイケナイ関係 (セキュリティ的な意味で) -Introduction of XXE attack and XML Bomb with...
XML と PHP のイケナイ関係 (セキュリティ的な意味で) -Introduction of XXE attack and XML Bomb with...Kousuke Ebihara
 
初めての Data api
初めての Data api初めての Data api
初めての Data apiYuji Takayama
 
FxUG in Toyama - ASphalt2 container -
FxUG in Toyama - ASphalt2 container -FxUG in Toyama - ASphalt2 container -
FxUG in Toyama - ASphalt2 container -Akio Katayama
 
FxUG in Toyama - ASphalt2 container -
FxUG in Toyama - ASphalt2 container -FxUG in Toyama - ASphalt2 container -
FxUG in Toyama - ASphalt2 container -Akio Katayama
 
MacPort_&_FTP_ver1.0
MacPort_&_FTP_ver1.0MacPort_&_FTP_ver1.0
MacPort_&_FTP_ver1.0Satoshi Kume
 

Similar to NIO.2を使って簡単ファイル操作 (20)

File API: Writer & Directories and System
File API: Writer & Directories and SystemFile API: Writer & Directories and System
File API: Writer & Directories and System
 
明日から使える Java SE 7
明日から使える Java SE 7明日から使える Java SE 7
明日から使える Java SE 7
 
2019-10-18 JXUG Xamarin.Essentials - #3 File System Helpers
2019-10-18 JXUG Xamarin.Essentials - #3 File System Helpers2019-10-18 JXUG Xamarin.Essentials - #3 File System Helpers
2019-10-18 JXUG Xamarin.Essentials - #3 File System Helpers
 
Alfresco勉強会20120829: やさしいShareダッシュレットの作り方
Alfresco勉強会20120829: やさしいShareダッシュレットの作り方Alfresco勉強会20120829: やさしいShareダッシュレットの作り方
Alfresco勉強会20120829: やさしいShareダッシュレットの作り方
 
Hive undocumented feature
Hive undocumented featureHive undocumented feature
Hive undocumented feature
 
BBBBB
BBBBBBBBBB
BBBBB
 
1MB
1MB1MB
1MB
 
分散ストリーム処理フレームワーク Apache S4
分散ストリーム処理フレームワーク Apache S4分散ストリーム処理フレームワーク Apache S4
分散ストリーム処理フレームワーク Apache S4
 
Spring Framework ふりかえりと4.3新機能
Spring Framework ふりかえりと4.3新機能Spring Framework ふりかえりと4.3新機能
Spring Framework ふりかえりと4.3新機能
 
20061122
2006112220061122
20061122
 
Node-v0.12の新機能について
Node-v0.12の新機能についてNode-v0.12の新機能について
Node-v0.12の新機能について
 
XML と PHP のイケナイ関係 (セキュリティ的な意味で) -Introduction of XXE attack and XML Bomb with...
XML と PHP のイケナイ関係 (セキュリティ的な意味で) -Introduction of XXE attack and XML Bomb with...XML と PHP のイケナイ関係 (セキュリティ的な意味で) -Introduction of XXE attack and XML Bomb with...
XML と PHP のイケナイ関係 (セキュリティ的な意味で) -Introduction of XXE attack and XML Bomb with...
 
Sc2009autumn s2robot
Sc2009autumn s2robotSc2009autumn s2robot
Sc2009autumn s2robot
 
HTML5最新動向
HTML5最新動向HTML5最新動向
HTML5最新動向
 
初めての Data api
初めての Data api初めての Data api
初めての Data api
 
20080524
2008052420080524
20080524
 
FxUG in Toyama - ASphalt2 container -
FxUG in Toyama - ASphalt2 container -FxUG in Toyama - ASphalt2 container -
FxUG in Toyama - ASphalt2 container -
 
FxUG in Toyama - ASphalt2 container -
FxUG in Toyama - ASphalt2 container -FxUG in Toyama - ASphalt2 container -
FxUG in Toyama - ASphalt2 container -
 
HTML5&API総まくり
HTML5&API総まくりHTML5&API総まくり
HTML5&API総まくり
 
MacPort_&_FTP_ver1.0
MacPort_&_FTP_ver1.0MacPort_&_FTP_ver1.0
MacPort_&_FTP_ver1.0
 

More from Yuichi Sakuraba

Vector API - Javaによるベクターコンピューティング
Vector API - JavaによるベクターコンピューティングVector API - Javaによるベクターコンピューティング
Vector API - JavaによるベクターコンピューティングYuichi Sakuraba
 
Oracle Code One - Java KeynoteとJava SE
Oracle Code One - Java KeynoteとJava SEOracle Code One - Java KeynoteとJava SE
Oracle Code One - Java KeynoteとJava SEYuichi Sakuraba
 
Project Loom + Project Panama
Project Loom + Project PanamaProject Loom + Project Panama
Project Loom + Project PanamaYuichi Sakuraba
 
Project Loom - 限定継続と軽量スレッド -
Project Loom - 限定継続と軽量スレッド - Project Loom - 限定継続と軽量スレッド -
Project Loom - 限定継続と軽量スレッド - Yuichi Sakuraba
 
Oracle Code One 報告会 Java SE Update
Oracle Code One 報告会 Java SE UpdateOracle Code One 報告会 Java SE Update
Oracle Code One 報告会 Java SE UpdateYuichi Sakuraba
 
今こそStream API入門
今こそStream API入門今こそStream API入門
今こそStream API入門Yuichi Sakuraba
 
Oracle Code One 報告会 Java SE Update
Oracle Code One 報告会 Java SE UpdateOracle Code One 報告会 Java SE Update
Oracle Code One 報告会 Java SE UpdateYuichi Sakuraba
 
Learn Language 2018 Java Language Update
Learn Language 2018 Java Language Update Learn Language 2018 Java Language Update
Learn Language 2018 Java Language Update Yuichi Sakuraba
 
Dockerに向けて、Javaもダイエット
Dockerに向けて、JavaもダイエットDockerに向けて、Javaもダイエット
Dockerに向けて、JavaもダイエットYuichi Sakuraba
 
Migration Guide to Java SE 10, and also Java SE 11
Migration Guide to Java SE 10, and also Java SE 11Migration Guide to Java SE 10, and also Java SE 11
Migration Guide to Java SE 10, and also Java SE 11Yuichi Sakuraba
 
琥珀色のJava - Project Amber -
琥珀色のJava - Project Amber -琥珀色のJava - Project Amber -
琥珀色のJava - Project Amber -Yuichi Sakuraba
 
Moving to Module: Issues & Solutions
Moving to Module: Issues & SolutionsMoving to Module: Issues & Solutions
Moving to Module: Issues & SolutionsYuichi Sakuraba
 
モジュール移行の課題と対策
モジュール移行の課題と対策モジュール移行の課題と対策
モジュール移行の課題と対策Yuichi Sakuraba
 
Project Jigsawと、ちょっとだけVector API
Project Jigsawと、ちょっとだけVector APIProject Jigsawと、ちょっとだけVector API
Project Jigsawと、ちょっとだけVector APIYuichi Sakuraba
 
Java SEの現在、過去 そして未来
Java SEの現在、過去 そして未来Java SEの現在、過去 そして未来
Java SEの現在、過去 そして未来Yuichi Sakuraba
 
Introduction of Project Jigsaw
Introduction of Project JigsawIntroduction of Project Jigsaw
Introduction of Project JigsawYuichi Sakuraba
 
Encouragement of Java SE 9
Encouragement of Java SE 9Encouragement of Java SE 9
Encouragement of Java SE 9Yuichi Sakuraba
 

More from Yuichi Sakuraba (20)

Vector API - Javaによるベクターコンピューティング
Vector API - JavaによるベクターコンピューティングVector API - Javaによるベクターコンピューティング
Vector API - Javaによるベクターコンピューティング
 
Oracle Code One - Java KeynoteとJava SE
Oracle Code One - Java KeynoteとJava SEOracle Code One - Java KeynoteとJava SE
Oracle Code One - Java KeynoteとJava SE
 
Project Loom + Project Panama
Project Loom + Project PanamaProject Loom + Project Panama
Project Loom + Project Panama
 
Project Loom - 限定継続と軽量スレッド -
Project Loom - 限定継続と軽量スレッド - Project Loom - 限定継続と軽量スレッド -
Project Loom - 限定継続と軽量スレッド -
 
Oracle Code One 報告会 Java SE Update
Oracle Code One 報告会 Java SE UpdateOracle Code One 報告会 Java SE Update
Oracle Code One 報告会 Java SE Update
 
今こそStream API入門
今こそStream API入門今こそStream API入門
今こそStream API入門
 
Oracle Code One 報告会 Java SE Update
Oracle Code One 報告会 Java SE UpdateOracle Code One 報告会 Java SE Update
Oracle Code One 報告会 Java SE Update
 
Learn Language 2018 Java Language Update
Learn Language 2018 Java Language Update Learn Language 2018 Java Language Update
Learn Language 2018 Java Language Update
 
Dockerに向けて、Javaもダイエット
Dockerに向けて、JavaもダイエットDockerに向けて、Javaもダイエット
Dockerに向けて、Javaもダイエット
 
What's New in Java
What's New in JavaWhat's New in Java
What's New in Java
 
Migration Guide to Java SE 10, and also Java SE 11
Migration Guide to Java SE 10, and also Java SE 11Migration Guide to Java SE 10, and also Java SE 11
Migration Guide to Java SE 10, and also Java SE 11
 
琥珀色のJava - Project Amber -
琥珀色のJava - Project Amber -琥珀色のJava - Project Amber -
琥珀色のJava - Project Amber -
 
Moving to Module: Issues & Solutions
Moving to Module: Issues & SolutionsMoving to Module: Issues & Solutions
Moving to Module: Issues & Solutions
 
モジュール移行の課題と対策
モジュール移行の課題と対策モジュール移行の課題と対策
モジュール移行の課題と対策
 
Project Jigsawと、ちょっとだけVector API
Project Jigsawと、ちょっとだけVector APIProject Jigsawと、ちょっとだけVector API
Project Jigsawと、ちょっとだけVector API
 
Java SE 9の全貌
Java SE 9の全貌Java SE 9の全貌
Java SE 9の全貌
 
Java SEの現在、過去 そして未来
Java SEの現在、過去 そして未来Java SEの現在、過去 そして未来
Java SEの現在、過去 そして未来
 
Java SE 9 のススメ
Java SE 9 のススメJava SE 9 のススメ
Java SE 9 のススメ
 
Introduction of Project Jigsaw
Introduction of Project JigsawIntroduction of Project Jigsaw
Introduction of Project Jigsaw
 
Encouragement of Java SE 9
Encouragement of Java SE 9Encouragement of Java SE 9
Encouragement of Java SE 9
 

Recently uploaded

CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?akihisamiyanaga1
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineerYuki Kikuchi
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...博三 太田
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案sugiuralab
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)Hiroshi Tomioka
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfFumieNakayama
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)UEHARA, Tetsutaro
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfFumieNakayama
 

Recently uploaded (8)

CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
 

NIO.2を使って簡単ファイル操作

  • 1. NIO.2 を使って、 簡単ファイル操作 Java in the Box 櫻庭 祐一 #jt12_s104
  • 2. Agenda JSR 51 New I/O APIs JSR 203 More New I/O APIs New Filesystem API Conclusion
  • 3. JSR 51 New I/O APIs Buffer/Direct Buffer Channel Non-Blocking I/O Charset Regular Expression Mark Reinhold
  • 4. JSR 51 New I/O APIs Buffer/Direct Buffer り ! あ Channel し 残 Non-Blocking I/O み 積 Charset Regular Expression Mark Reinhold
  • 5. An API for scalable I/O operations on both files and sockets, in the form of either asynchronous requests or polling A new filesystem interface that supports bulk access to file attributes (including MIME content types), escape to filesystem-specific APIs, and a service-provider interface for pluggable filesystem implementations. Mark Reinhold
  • 6. JSR 203 More New I/O APIs Asynchronous I/O New Filesystem Interface Multicast with SocketChannel Alan Bateman
  • 7. コピーなどの基本操作 Why Now? foo.txt 作成日などのメタデータ ディレクトリの探索
  • 8. <<factory>> FileSystems <<interface>> FileSystem Path Files Basic Classes
  • 9. Instantiation // 物理的なファイルシステム FileSystem fileSystem = FileSystems.getDefault(); // foo.txt に対応するパスの生成 Path foo = fileSystem.getPath("foo.txt"); // baz/bar/foo.txt に対応するパスの生成 Path foo2 = fileSystem.getPath("baz", "bar", "foo.txt"); // foo.txt に対応するパスの簡易的な生成 Path foo3 = Paths.get("foo.txt");
  • 10. Instantiation FileSystem fileSystem = FileSystems.getDefault(); Path jarfile = fileSystem.getPath("someapp.jar"); // someapp.jar に対応する FileSystem オブジェクトを取得する FileSystem jarFileSystem = FileSystems.newFileSystem(jarfile, ClassLoader.getSystemClassLoader()); << 処理 >> // クローズ jarFileSystem.close();
  • 11. Conversion File file = ...; // File から Path Path path = file.toPath(); // Path から File File file2 = path.toFile();
  • 12. Creation // 空のファイルを生成 Path path = fileSystem.getPath("foo.txt"); Files.createFile(path); // ディレクトリを生成 Path dir = fileSystem.getPath("bar"); Files.createDirectory(dir); // ディレクトリツリーを生成 Path dir2 = fileSystem.getPath("baz", "quux"); Files.createDirectories(dir2);
  • 13. Link Creation // ハードリンクの作成 Path target = fileSystem.getPath("foo.txt"); Path link = fileSystem.getPath("bar.txt"); Files.createLink(link, target); // シンボリックリンクの生成 Path symLink = fileSystem.getPath("baz.txt"); Files.createSymbolicLink(symLink, target);
  • 14. Operations Path src = fileSystem.getPath(...); Path dest = fileSystem.getPath(...); // File Copy Files.copy(src, dest); // Move Files.move(src, dest); // Delete Files.delete(dest); Files.deleteIfExists(dest);
  • 15. Input/Output Path path = ...; Charset charset = ...; // Reader/Wirter BufferedReader reader = Files.newBufferedReader(path, charset); BufferedWriter writer = Files.newBufferedWriter(path, charset); // Stream InputStream iStream = Files.newInputStream(path); OutputStream oStream = Files.newOutputStream(path); // Channel SeekableByteChannel channel = Files.newByteChannel(path);
  • 16. Simple Input/Output Path path = ...; Charset charset = ...; // 簡易入力 byte[] bytes = Files.readAllBytes(path); List<String> lines = Files.readAllLines(path, charset); // 簡易出力 Files.write(path, bytes); Files.write(path, lines, charset);
  • 17. Metadata foo.txt
  • 18. Two ways for dealing with Metadata Calling Files methods Through AttributeView interface
  • 19. Metadata Path path = ...; // オーナー UserPrincipal owner = Files.getOwner(path); // 最終更新日時 FileTime modifyDate = Files.getLastModifiedTime(path); // 作成日時 FileTime creatDate = (FileTime)Files.getAttribute(path, "creationTime");
  • 20. AttributeView <<interface>> <<interface>> AttributeView FileAttributeView <<interface>> BasicFileAttributeView <<interface>> AclFileAttributeView <<interface>> FileOwnerAttributeView <<interface>> <<interface>> DosFileAttributeView PosixFileAttributeView
  • 21. AttributeView Path path = ...; BasicFileAttributeView view = Files.getFileAttributeView(path, BasicFileAttributeView.class); // アトリビュートを保持するのは BasicFileAttribute BasicFileAttributes attributes = view.readAttributes(); // アトリビュートの取得 FileTime creationTime = attributes.creationTime(); FileTime lastAccessTime = attributes.lastAccessTime();
  • 24. 1. preVisitDirectory alpha 11. postVisitDirectory 2. preVisitDirectory bravo 8. preVisitDirectory charlie 10. postVisitDirectory 7. postVisitDirectory 3. visitFile bar.txt delta baz.txt 9. visitFile 4. preVisitDirectory 6. postVisitDirectory <<interface>> foo.txt FileVisitor 5. visitFile preVisitDirectory postVisitDirectory visitFile visitFileFailed
  • 25. File Search Path startDir = Paths.get("."); final String regex = "Test.java"; Files.walkFileTree(startDir, new SimpleFileVisitor<Path>() { public FileVisitResult visitFile(Path path, BasicFileAttributes attrs) { if (Pattern.matches(regex, path.getFileName().toString())) { System.out.println("File: " + path); } return FileVisitResult.CONTINUE; } });
  • 26. Directory Watch File/Directory Creation Delete Update
  • 27. Directory Watch Path targetDir = fileSystem.getPath(...); // WatchService オブジェクトの生成 WatchService watcher = fileSystem.newWatchService(); // ディレクトリに WatchService オブジェクトを登録 targetDir.register(watcher, StandardWatchEventKinds.ENTRY_CREATE, StandardWatchEventKinds.ENTRY_DELETE, StandardWatchEventKinds.ENTRY_MODIFY);
  • 28. Directory Watch while(...) { // 現在のイベントを取得 WatchKey key = watcher.take(); for (WatchEvent<?> event: key.pollEvents()) { // イベントの種類と対象となるパスを出力 System.out.println(event.kind() + " " + event.context()); } key.reset(); }
  • 29. Conclusion JSR 203 More New I/O New Filesystem Interface Asyn I/O Multicast New Filesystem Interface foo.txt
  • 30. References ITpro Java SE 7 徹底理解 第 4 回 New I/O 2 の 新しいファイルシステムインタフェース その 1 http://itpro.nikkeibp.co.jp/article/COLUMN/20110725/362803/ 第 5 回 New I/O 2 の 新しいファイルシステムインタフェース その 2 http://itpro.nikkeibp.co.jp/article/COLUMN/20110830/367909/ 第 6 回 New I/O 2 で非同期 I/O http://itpro.nikkeibp.co.jp/article/COLUMN/20110927/369451/
  • 31. 使っ て、 NIO .2 を 操作 ァイ ル 簡単 フ eB ox in th Ja va 一 庭 祐 櫻