java得到項目絕對路徑



在jsp和class文件中調用的相對路徑不一樣。在jsp裏,根目錄是WebRoot 在class文件中,根目錄是WebRoot/WEB-INF/classes 固然你也能夠用System.getProperty("user.dir")獲取你工程的絕對路徑。java

另:在Jsp,Servlet,Java中詳細得到路徑的方法!git

1.jsp中取得路徑:

以工程名爲TEST爲例:

(1)獲得包含工程名的當前頁面全路徑:request.getRequestURI()
結果:/TEST/test.jsp
(2)獲得工程名:request.getContextPath()
結果:/TEST
(3)獲得當前頁面所在目錄下全名稱:request.getServletPath()
結果:若是頁面在jsp目錄下 /TEST/jsp/test.jsp
(4)獲得頁面所在服務器的全路徑:application.getRealPath("頁面.jsp")
結果:D:\resin\webapps\TEST\test.jsp
(5)獲得頁面所在服務器的絕對路徑:absPath=new java.io.File(application.getRealPath(request.getRequestURI())).getParent();
結果:D:\resin\webapps\TEST

2.在類中取得路徑:

(1)類的絕對路徑:Class.class.getClass().getResource("/").getPath()
結果:/D:/TEST/WebRoot/WEB-INF/classes/pack/
(2)獲得工程的路徑:System.getProperty("user.dir")
結果:D:\TEST

3.在Servlet中取得路徑:

(1)獲得工程目錄:request.getSession().getServletContext().getRealPath("") 參數可具體到包名。
結果:E:\Tomcat\webapps\TEST
(2)獲得IE地址欄地址:request.getRequestURL()
結果:http://localhost:8080/TEST/test
(3)獲得相對地址:request.getRequestURI()
結果:/TEST/test
web

2011-01-04 11:40

另,Class類還有一個getResourceAsStream方法,記得之前有個項目要讀取在同一個包內的一個xml,就用的這個。服務器

1.如何得到當前文件路徑
經常使用:
(1).Test.class.getResource("")
獲得的是當前類FileTest.class文件的URI目錄。不包括本身!
(2).Test.class.getResource("/")
獲得的是當前的classpath的絕對URI路徑
(3).Thread.currentThread().getContextClassLoader().getResource("")
獲得的也是當前ClassPath的絕對URI路徑
(4).Test.class.getClassLoader().getResource("")
獲得的也是當前ClassPath的絕對URI路徑
(5).ClassLoader.getSystemResource("")
獲得的也是當前ClassPath的絕對URI路徑
儘可能不要使用相對於System.getProperty("user.dir")當前用戶目錄的相對路徑,後面能夠看出得出結果五花八門。
(6) new File("").getAbsolutePath()也可用。
       
2.Web服務器
(1).Tomcat
在類中輸出System.getProperty("user.dir");顯示的是%Tomcat_Home%/bin
(2).Resin
不是你的JSP放的相對路徑,是JSP引擎執行這個JSP編譯成SERVLET
路徑爲根.好比用新建文件法測試File f = new File("a.htm");
這個a.htm在resin的安裝目錄下 
(3).如何讀文件
使用ServletContext.getResourceAsStream()就能夠
(4).得到文件真實路徑
String   file_real_path=ServletContext.getRealPath("mypath/filename");  
不建議使用request.getRealPath("/"); 
3.文件操做的類,不建議使用,可使用commons io類app

import java.io.*;
import java.net.*;
import java.util.*;webapp

 

public class FileUtil {
  
   private FileUtil() {jsp

   }測試

  
   public static void touch(File file) {
     long currentTime = System.currentTimeMillis();
     if (!file.exists()) {
       System.err.println("file not found:" + file.getName());
       System.err.println("Create a new file:" + file.getName());
       try {
         if (file.createNewFile()) {
         //   System.out.println("Succeeded!");
         }
         else {
         //   System.err.println("Create file failed!");
         }
       }
       catch (IOException e) {
       //   System.err.println("Create file failed!");
         e.printStackTrace();
       }
     }
     boolean result = file.setLastModified(currentTime);
     if (!result) {
     //   System.err.println("touch failed: " + file.getName());
     }
   }this

  
   public static void touch(String fileName) {
     File file = new File(fileName);
     touch(file);
   }url

  
   public static void touch(File[] files) {
     for (int i = 0; i < files.length; i++) {
       touch(files);
     }
   }

  
   public static void touch(String[] fileNames) {
     File[] files = new File[fileNames.length];
     for (int i = 0; i < fileNames.length; i++) {
       files = new File(fileNames);
     }
     touch(files);
   }

  
   public static boolean isFileExist(String fileName) {
     return new File(fileName).isFile();
   }

  
   public static boolean makeDirectory(File file) {
     File parent = file.getParentFile();
     if (parent != null) {
       return parent.mkdirs();
     }
     return false;
   }

  
   public static boolean makeDirectory(String fileName) {
     File file = new File(fileName);
     return makeDirectory(file);
   }

  
   public static boolean emptyDirectory(File directory) {
     boolean result = false;
     File[] entries = directory.listFiles();
     for (int i = 0; i < entries.length; i++) {
       if (!entries.delete()) {
         result = false;
       }
     }
     return true;
   }

  
   public static boolean emptyDirectory(String directoryName) {
     File dir = new File(directoryName);
     return emptyDirectory(dir);
   }

  
   public static boolean deleteDirectory(String dirName) {
     return deleteDirectory(new File(dirName));
   }

  
   public static boolean deleteDirectory(File dir) {
     if ( (dir == null) || !dir.isDirectory()) {
       throw new IllegalArgumentException("Argument " + dir +
                                          " is not a directory. ");
     }

     File[] entries = dir.listFiles();
     int sz = entries.length;

     for (int i = 0; i < sz; i++) {
       if (entries.isDirectory()) {
         if (!deleteDirectory(entries)) {
           return false;
         }
       }
       else {
         if (!entries.delete()) {
           return false;
         }
       }
     }

     if (!dir.delete()) {
       return false;
     }
     return true;
   }


  
   public static URL getURL(File file) throws MalformedURLException {
     String fileURL = "file:/" + file.getAbsolutePath();
     URL url = new URL(fileURL);
     return url;
   }

  
   public static String getFileName(String filePath) {
     File file = new File(filePath);
     return file.getName();
   }

  
   public static String getFilePath(String fileName) {
     File file = new File(fileName);
     return file.getAbsolutePath();
   }

  
   public static String toUNIXpath(String filePath) {
     return filePath.replace('\\', '/');
   }

  
   public static String getUNIXfilePath(String fileName) {
     File file = new File(fileName);
     return toUNIXpath(file.getAbsolutePath());
   }

  
   public static String getTypePart(String fileName) {
     int point = fileName.lastIndexOf('.');
     int length = fileName.length();
     if (point == -1 || point == length - 1) {
       return "";
     }
     else {
       return fileName.substring(point + 1, length);
     }
   }

  
   public static String getFileType(File file) {
     return getTypePart(file.getName());
   }

  
   public static String getNamePart(String fileName) {
     int point = getPathLsatIndex(fileName);
     int length = fileName.length();
     if (point == -1) {
       return fileName;
     }
     else if (point == length - 1) {
       int secondPoint = getPathLsatIndex(fileName, point - 1);
       if (secondPoint == -1) {
         if (length == 1) {
           return fileName;
         }
         else {
           return fileName.substring(0, point);
         }
       }
       else {
         return fileName.substring(secondPoint + 1, point);
       }
     }
     else {
       return fileName.substring(point + 1);
     }
   }

  
   public static String getPathPart(String fileName) {
     int point = getPathLsatIndex(fileName);
     int length = fileName.length();
     if (point == -1) {
       return "";
     }
     else if (point == length - 1) {
       int secondPoint = getPathLsatIndex(fileName, point - 1);
       if (secondPoint == -1) {
         return "";
       }
       else {
         return fileName.substring(0, secondPoint);
       }
     }
     else {
       return fileName.substring(0, point);
     }
   }

  
   public static int getPathIndex(String fileName) {
     int point = fileName.indexOf('/');
     if (point == -1) {
       point = fileName.indexOf('\\');
     }
     return point;
   }

  
   public static int getPathIndex(String fileName, int fromIndex) {
     int point = fileName.indexOf('/', fromIndex);
     if (point == -1) {
       point = fileName.indexOf('\\', fromIndex);
     }
     return point;
   }

  
   public static int getPathLsatIndex(String fileName) {
     int point = fileName.lastIndexOf('/');
     if (point == -1) {
       point = fileName.lastIndexOf('\\');
     }
     return point;
   }

  
   public static int getPathLsatIndex(String fileName, int fromIndex) {
     int point = fileName.lastIndexOf('/', fromIndex);
     if (point == -1) {
       point = fileName.lastIndexOf('\\', fromIndex);
     }
     return point;
   }

  
   public static String trimType(String filename) {
     int index = filename.lastIndexOf(".");
     if (index != -1) {
       return filename.substring(0, index);
     }
     else {
       return filename;
     }
   }
  
   public static String getSubpath(String pathName,String fileName) {
     int index = fileName.indexOf(pathName);
     if (index != -1) {
       return fileName.substring(index + pathName.length() + 1);
     }
     else {
       return fileName;
     }
   }

}
4.遺留問題

目前new FileInputStream()只會使用絕對路徑,相對沒用過,由於要相對於web服務器地址,比較麻煩

還不如寫個配置文件來的快哪

5.按Java文件類型分類讀取配置文件

配 置文件是應用系統中不可缺乏的,能夠增長程序的靈活性。java.util.Properties是從jdk1.2就有的類,一直到如今都支持load ()方法,jdk1.4之後save(output,string) ->store(output,string)。若是隻是單純的讀,根本不存在煩惱的問題。web層能夠經過 Thread.currentThread().getContextClassLoader().
getResourceAsStream("xx.properties") 獲取;Application能夠經過new FileInputStream("xx.properties");直接在classes一級獲取。關鍵是有時咱們須要經過web修改配置文件,咱們不 能將路徑寫死了。通過測試以爲有如下心得:

1.servlet中讀寫。若是運用Struts 或者Servlet能夠直接在初始化參數中配置,調用時根據servletcontext的getRealPath("/")獲取真實路徑,再根據 String file = this.servlet.getInitParameter("abc");獲取相對的WEB-INF的相對路徑
例:
InputStream input = Thread.currentThread().getContextClassLoader().
getResourceAsStream("abc.properties");
Properties prop = new Properties();
prop.load(input);
input.close();
OutputStream out = new FileOutputStream(path);
prop.setProperty("abc", 「test");
prop.store(out, 「–test–");
out.close();

2.直接在jsp中操做,經過jsp內置對象獲取可操做的絕對地址。
例:
// jsp頁面
String path = pageContext.getServletContext().getRealPath("/");
String realPath = path+"/WEB-INF/classes/abc.properties";

//java 程序
InputStream in = getClass().getClassLoader().getResourceAsStream("abc.properties"); // abc.properties放在webroot/WEB-INF/classes/目錄下
prop.load(in);
in.close();

OutputStream out = new FileOut

package my;
02  
03 import java.io.File;
04 import java.io.IOException;
05 import java.net.URL;
06  
07 public class MyUrlDemo {
08  
09      
10     public static void main(String[] args) {
11         MyUrlDemo muDemo = new MyUrlDemo();
12         try {
13             muDemo.showURL();
14         } catch (IOException e) {
15             // TODO Auto-generated catch block
16             e.printStackTrace();
17         }
18     }
19      
20     public void showURL() throws IOException {
21          
22         // 第一種:獲取類加載的根路徑   D:\git\daotie\daotie\target\classes
23         File f = new File(this.getClass().getResource("/").getPath());
24         System.out.println(f);
25  
26         // 獲取當前類的所在工程路徑; 若是不加「/」  獲取當前類的加載目錄  D:\git\daotie\daotie\target\classes\my
27         File f2 = new File(this.getClass().getResource("").getPath());
28         System.out.println(f2);
29  
30         // 第二種:獲取項目路徑    D:\git\daotie\daotie
31         File directory = new File("");// 參數爲空
32         String courseFile = directory.getCanonicalPath();
33         System.out.println(courseFile);
34          
35  
36         // 第三種:  file:/D:/git/daotie/daotie/target/classes/
37         URL xmlpath = this.getClass().getClassLoader().getResource("");
38         System.out.println(xmlpath);
39      
40  
41         // 第四種: D:\git\daotie\daotie
42         System.out.println(System.getProperty("user.dir"));
43         /*
44          * 結果: C:\Documents and Settings\Administrator\workspace\projectName
45          * 獲取當前工程路徑
46          */
47  
48         // 第五種:  獲取全部的類路徑 包括jar包的路徑
49         System.out.println(System.getProperty("java.class.path"));
50          
51     }
52 }
相關文章
相關標籤/搜索