2012年8月24日金曜日

NIO2を使ってファイルの作成

Files.createFileを使ってファイルの作成を行う。ファイル作成時にはアクセス権限も設定できたりする。

属性指定なしでファイル作成

Path path = Paths.get("test.txt")
Files.createFile(path)

umaskが022なので644でファイルが作られる。
sh-3.2$ umask
0022
sh-3.2$ ls -ln test.txt
-rw-r--r--  1 501  20  0  8 24 23:40 test.txt


アクセス権限(rwx------)を指定してファイル作成

FileAttribute<Set<PosixFilePermission>> attribute = PosixFilePermissions.asFileAttribute(PosixFilePermissions.fromString("rwx------"))
Path path = Paths.get("test.txt")
// 2番目の引数にFileAttributeを指定する。
Files.createFile(path, attribute)

指定したアクセス権限でファイルが作られる。
sh-3.2$ ls -ltr test.txt
-rwx------  1 hove  staff  0  8 24 23:45 test.txt

2012年8月19日日曜日

NIO2で再帰的にファイルを扱う方法

Files.walkFileTreeメソッドを使用して、従来のjava.io.Fileを使う時よりも簡単にディレクトリを再帰的にたどってファイルを扱える。

下のコードだと、ディレクトリを再帰的にたどっていって、拡張子が「.groovy」の場合に標準出力にファイル名(フルパス)を出力しています。
import java.nio.file.*
import java.nio.file.attribute.BasicFileAttributes

def dir = Paths.get("../..")
Files.walkFileTree(dir, new FileVisitor());

class FileVisitor extends SimpleFileVisitor {
  @Override
  FileVisitResult visitFile(Path file, BasicFileAttributes attrs) {
    if (file.toString().endsWith(".groovy")) {
      println "groovyファイル:${file.toAbsolutePath().normalize()}"
    }
    return FileVisitResult.CONTINUE
  }
}

2012年8月18日土曜日

java.io.Fileとjava.nio.file.Pathの変換

File.toPathとPath.toFileを使う。

File file = new File('.')
// FileからPathへ
Path path = file.toPath()
// PathからFileへ
File toFile = path.toFile()

2012年8月16日木曜日

NIO2でglobを使ってファイル抽出

Files.newDirectoryStreamの第二引数にglobを指定する。


「*」を使用すると全ての文字
// すべてのファイルにマッチ
Files.newDirectoryStream(path, "*").each {
  println it.fileName
}

// sから始まるファイルにマッチ
Files.newDirectoryStream(path, "s*").each {
  println it.fileName
}

「?」は任意の1文字
// 拡張子をのぞいたファイル名が3文字
Files.newDirectoryStream(path, "???.groovy").each {
  println it.fileName
}

「[]」を使用すると[]の中で指定した文字
// 小文字から始まるファイル
Files.newDirectoryStream(path, "[a-z]*").each {
  println it.fileName
}

// mとnから始まるファイル
Files.newDirectoryStream(path, "[mn]*").each {
  println it.fileName
}

「{}」は、{}内に指定した値のいずれか(カンマ区切りで指定する。)
// 拡張子がjavaとgroovyのファイル
Files.newDirectoryStream(path, "*.{groovy,java}").each {
  println it.fileName
}

2012年8月5日日曜日

NIO2でファイルのコピー

Files#copyでコピーができる。

// コピー元
Path from = Paths.get("C:\\work\\test.txt");
// コピー先
Path to = Paths.get("C:\\work\\test2.txt");

// コピー
Files.copy(from, to);

2012年8月3日金曜日

無効になったPL/SQLのリコンパイル

テーブルの再作成などによって、無効化されたPL/SQLプログラムを抽出して再コンパイルする方法

USER_OBJECTS(場合によっては、ALLだったりする)から、STATUSがINVALIDのPL/SQLプログラムを抽出する。
ここで、抽出されたPL/SQLが無効化されているものなので、ALTER文(alter object_type object_name compile)でコンパイルしなおしてあげる。

以下のSQL文で抽出すると、ALTER文が生成されるので、コピペしてあげればリコンパイルができます。
SELECT 'ALTER ' || OBJECT_TYPE || ' ' || OBJECT_NAME || ' COMPILE;' FROM USER_OBJECTS WHERE STATUS = 'INVALID'