タグ
  ANSI (1)
  ASP.NET (10)
  Active Directory (55)
  BAT (16)
  Backup (2)
  CSharp (11)
  CentOS (4)
  C言語 (4)
  DNS (4)
  Excel (3)
  FFmpeg (1)
  Fedora (4)
  FreeBSD (6)
  IPv6 (3)
  Java (11)
  JavaScript (8)
  LAN (1)
  Link (4)
  Linux (15)
  Mac (1)
  Mail (2)
  Microsoft (3)
  NIS (1)
  Node.js (6)
  OpenIndiana (1)
  OpenLDAP (2)
  OpenSSL (1)
  OpenSolaris (4)
  PHP (2)
  Perl (2)
  Postfix (1)
  PostgreSQL (2)
  PowerShell (34)
  RFC (3)
  SQL Server (5)
  Solaris (10)
  Ubuntu (9)
  VBScript (73)
  VCpp (2)
  VMware (3)
  Visual Basic (1)
  WMI (17)
  WSF (5)
  WSH (10)
  Windows (19)
  bash (1)
  bind (1)
  iSCSI (1)
  おまけ (3)
  作成中 (8)
  慣用句 (3)
  正規表現 (6)
  運用 (8)
作成 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-2012 UPKEN IPv4