Java6のEOLが今年(2012年)の11月に迫っています。
なので、Java6を使っている人はJava7に切り替え始めましょう。
Javaの最新7の5分の1のバージョンを使っている人(つまりJava1.4を使っている人)はとっととアップデートして下さい。
Java1.4のEOLは2008年10月30日です。
Sunと契約している場合を除いて、契約していない人たちは泣き言を言わずアップデートしましょう。
本題
さて、Java7になってから登場したNIO2をちょっといじってみたいと思います。
NIO2によって、Javaではいままで扱えなかったシンボリックリンクとか、ファイルの更新日付とか、ファイルパーミッションとかが扱えるようになりました。
その中心にあるのはPathインターフェースです。
というわけで、Pathインターフェースについて、ちょっとおさらいします。
java.nio.file.Path
まあ、PathのJavadocを見ればだいたい分かるんですが、
どういう値が返ってきているかわからないので、1つずつ試してみましょう。
C:\Users\mike>groovysh
Groovy Shell (1.8.6, JVM: 1.7.0_02)
Type 'help' or '\h' for help.
-----------------------------------------------------------
groovy:000> home = System.env['HOMEPATH']
===> \Users\mike
groovy:000> dir = new File(home)
===> \Users\mike
groovy:000> path = dir.toPath()
===> \Users\mike
groovy:000> path.class
===> class sun.nio.fs.WindowsPath
まず、Pathはインターフェースなのでnew演算子でインスタンス化することは出来ません。
というわけで、
java.io.File#toPath()
からインスタンスを取得します。Windows7で実行していますが、実体は
sun.nio.fs.WindowsPath
です。メソッド
では、ひとつずつメソッドを確認して行きましょう。
getFileName()
Path
の名前を返します。groovy:000> path.fileName
===> mike
getName(int index)
とgetNameCount()
getNameCount
はPath
を構成するPath
の要素数を返します。getName
は引数で指定された位置のPath
の名前を返します。groovy:000> Integer.metaClass.define {
groovy:001> collect = {Closure c ->
groovy:002> def collection = []
groovy:003> delegate.times {
groovy:004> collection << c(it)
groovy:005> }
groovy:006> return collection
groovy:007> }
groovy:008> }
===> groovy.lang.ExpandoMetaClass@65ad9b63[class java.lang.Integer]
groovy:000> path.nameCount.collect { path.getName(it) }
===> [Users, mike]
getParent()
とgetRoot()
まあ、名前のとおりです。
groovy:000> path.parent
===> \Users
groovy:000> path.root
===> \
isAbsolute()
とtoAbsolutePath()
isAbsolute()
はOS用のちゃんとしたPath名であるか判断します。toAbsolutePath()
はまた、OS用のちゃんとしたPath名を取得します。プロジェクトなどで
src/main/resources
とやった場合などに使えそうですね。groovy:000> path.absolute
===> false
groovy:000> path.toAbsolutePath()
===> C:\Users\mike
続きは、その2で。
0 件のコメント:
コメントを投稿