倭マン's BLOG

くだらない日々の日記書いてます。 たまにプログラミング関連の記事書いてます。 書いてます。

Groovy JDK? It's GDK! (File 編6) その他のメソッド

さぁ、今回は GDK が File クラスに追加するメソッドのうち、今まで扱ってなかった残りのメソッドを見ていきます(目次)。 残りのメソッドは以下の通り:

メソッド 返り値 since
ファイル操作 size()
renameTo(String newPathName)
long
boolean
1.5.0
1.7.4
ディレクトリ操作 directorySize()
deleteDir()
createTempDir()
createTempDir(String prefix, String suffix)
long
boolean
File
File
2.1
1.6.0
?
?

2つの createTempDir() は static メソッドです。

今まで見てきたメソッドを合わせても、実は Groovy 2.0 以降で追加されたメソッドは directorySize() のみなのです(Groovy 2.1.3 時点)。 Groovy 1.8 使ってればほとんどの機能が使えるってことね。

ファイル操作

まずは(ディレクトリではなく)ファイルに関するメソッドを使ったサンプルコード:

// ***** 準備 *****
def file = new File('sample.txt')
file.text = ('a'..'z').join()
assert file.text == 'abcdefghijklmnopqrstuvwxyz'

// ファイル・サイズ取得 size()
println file.size()

// 名前変更 renameTo()
def file2 = new File('sample2.txt')
if(file2.exists())file2.delete()    // 変更先のファイルがあるとまずいので削除

assert file.renameTo('sample2.txt')    // 名前変更 成功すれば true が返される
assert file2.text == 'abcdefghijklmnopqrstuvwxyz'
assert !file.exists()    // 変更元のファイルはもちろんなくなる

renameTo() メソッドの返り値が名前変更後の File オブジェクトだと使いやすい気がするんだけど。 ちなみに、File オブジェクトを引数にとる renameTo() はもともと File クラスに定義されてますけどね。

ディレクトリ操作

次はディレクトリに関するメソッドのサンプルコード:

// ***** 準備 *****
new AntBuilder().with{
    mkdir dir :'src/org/sample/child1'
    mkdir dir :'src/org/sample/child2'
    touch file:'src/org/sample/Main.java'
    touch file:'src/org/sample/child1/Child1.java'
    touch file:'src/org/sample/child2/Child2.java'
}

def src = new File('src')

// ディレクトリ・サイズ取得
println src.directorySize()
assert src.size() == 0    // size() だと 0 が返されるようで・・・

// ディレクトリ全削除 deleteDir()
assert src.deleteDir()    // 中身あっても関係ないヨ
assert !src.exists()

// テンポラリ・ディレクトリ作成 createTempDir()
def dir1 = File.createTempDir()    // 接頭辞:'groovy-generated-, 接尾辞:'-tmpdir' でファイル作成
println dir1.canonicalPath

def dir2 = File.createTempDir('pre-', '-post')    // 接頭辞、接尾辞を指定してファイル作成
println dir2.canonicalPath

ディレクトリを表す File オブジェクトに対して size() を呼び出しても0が返されるだけのようですね。 そのための directorySize() なんでしょう。 deleteDir() はそのディレクトリがファイルやサブディレクトリを持っていても関係なく削除します。 使用時にはご注意を。 createTempDir() はテンポラリ(一時)ディレクトリを作成する static メソッドです。 テンポラリ・ファイルを作成するメソッドはもともと File クラスに定義されていますが、それのディレクトリバージョンです。

以上、GDK が java.io.File クラスに追加しているメソッドをザッと見てきました。 記事書いてて、へぇ~こんなメソッドあったんや、みたいなのが結構ありましたが皆さんはいかがでしたでしょうか。 次回はサラッと流してしまった traverse() メソッドをもう少し真面目に見て、このシリーズを終えたいと思います。

プログラミングGROOVY

プログラミングGROOVY

  • 作者: 関谷和愛,上原潤二,須江信洋,中野靖治
  • 出版社/メーカー: 技術評論社
  • 発売日: 2011/07/06
  • メディア: 単行本(ソフトカバー)
  • 購入: 6人 クリック: 392回
  • この商品を含むブログ (155件) を見る
Groovyイン・アクション

Groovyイン・アクション

  • 作者: Dierk Konig,Andrew Glover,Paul King,Guillaume Laforge,Jon Skeet,杉浦孝,櫻井正樹,須江信洋,関谷和愛,佐野徹郎,寺沢尚史
  • 出版社/メーカー: 毎日コミュニケーションズ
  • 発売日: 2008/09/27
  • メディア: 単行本(ソフトカバー)
  • 購入: 5人 クリック: 146回
  • この商品を含むブログ (121件) を見る