作成 2010.01.05
更新 2011.10.26
Java でファイル パスを取得する際に最適なメソッドの調査結果
検証環境

Ubuntu 9.10, sun-java6-jdk 6-15-1
Windows 7, java version "1.6.0_17"

検証コード

myfile.java

import java.io.File;
class myfile{
  public static void main(String args[]){
    if(args.length >= 1){
      File f = new File(args[0]);
      System.out.println(args[0]);
      System.out.println(f.getPath());
      System.out.println(f.toURI());
      System.out.println(f.getParent());
      System.out.println(f.getAbsolutePath());
      try{
        System.out.println(f.getCanonicalPath());
      }catch(Exception e){
        System.out.println("f.getCanonicalPath():" + e.getMessage());
      }
    }
  }
}
実行結果

正式なパスは getCanonicalPath() で取得するのが最適。

  • Ubuntu での実行結果
    $ javac myfile.java
    $ java myfile /var/www/html/../../../etc/passwd
    /var/www/html/../../../etc/passwd
    /var/www/html/../../../etc/passwd
    file:/var/www/html/../../../etc/passwd
    /var/www/html/../../../etc
    /var/www/html/../../../etc/passwd
    /etc/passwd
    
  • Windows での実行結果
    > javac myfile.java
    > java myfile "\wwwroot\html\..\..\windows"
    \wwwroot\html\..\..\windows
    \wwwroot\html\..\..\windows
    file:/C:/wwwroot/html/../../windows
    \wwwroot\html\..\..
    C:\wwwroot\html\..\..\windows
    C:\windows
    
タグ: Java

©2004-2017 UPKEN IPv4