在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/testweb
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;
04 |
import java.io.IOException; |
07 |
public class MyUrlDemo { |
10 |
public static void main(String[] args) { |
11 |
MyUrlDemo muDemo = new MyUrlDemo(); |
14 |
} catch (IOException e) { |
15 |
// TODO Auto-generated catch block |
20 |
public void showURL() throws IOException { |
22 |
// 第一種:獲取類加載的根路徑 D:\git\daotie\daotie\target\classes |
23 |
File f = new File( this .getClass().getResource( "/" ).getPath()); |
24 |
System.out.println(f); |
26 |
// 獲取當前類的所在工程路徑; 若是不加「/」 獲取當前類的加載目錄 D:\git\daotie\daotie\target\classes\my |
27 |
File f2 = new File( this .getClass().getResource( "" ).getPath()); |
28 |
System.out.println(f2); |
30 |
// 第二種:獲取項目路徑 D:\git\daotie\daotie |
31 |
File directory = new File( "" ); // 參數爲空 |
32 |
String courseFile = directory.getCanonicalPath(); |
33 |
System.out.println(courseFile); |
36 |
// 第三種: file:/D:/git/daotie/daotie/target/classes/ |
37 |
URL xmlpath = this .getClass().getClassLoader().getResource( "" ); |
38 |
System.out.println(xmlpath); |
41 |
// 第四種: D:\git\daotie\daotie |
42 |
System.out.println(System.getProperty( "user.dir" )); |
44 |
* 結果: C:\Documents and Settings\Administrator\workspace\projectName |
48 |
// 第五種: 獲取全部的類路徑 包括jar包的路徑 |
49 |
System.out.println(System.getProperty( "java.class.path" )); |