`
AutomaticThoughts
  • 浏览: 161723 次
社区版块
存档分类
最新评论

java获得项目绝对路径

    博客分类:
  • Java
 
阅读更多


在jsp和class文件中调用的相对路径不同。在jsp里,根目录是WebRoot 在class文件中,根目录是WebRoot/WEB-INF/classes 当然你也可以用System.getProperty("user.dir")获取你工程的绝对路径。

另:在Jsp,Servlet,Java中详细获得路径的方法!

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

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类

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

 

public class FileUtil {
  
   private FileUtil() {

   }

  
   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());
     }
   }

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

  
   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 FileOutputStream(path); // path为通过页面传入的路径
prop.setProperty("abc", “abcccccc");
prop.store(out, “–test–");
out.close();

3.只通过Java程序操作资源文件
InputStream in = new FileInputStream("abc.properties"); // 放在classes同级

OutputStream out = new FileOutputStream("abc.properties");
=======================================

分享到:
评论

相关推荐

    windows linux 下,获取java项目绝对路径的方法

    windows linux 下,获取java项目绝对路径的方法,struts2设置了struts.multipart.saveDir后会在根目录建立文件夹,这样会涉及linux下的权限问题

    java项目中获取路径详解

    java project和java web project项目中如何获得相对路径、绝对路径问题详解

    Java获取Tomcat下war包部署的Web工程根目录路径的方法

    开发web工程时经常要获取工程的根目录,自己用Java实现的获取Tomcat下war包部署的Web工程根目录路径的方法,主要利用web工程默认的目录结构,此外也可以指定工程名称获取工程目录的绝对路径

    获取项目的相对路径和绝对路径

    本文档是本人经过多次实验和长时间的累计总结的java路径问题

    Java路径的最终解决方案:相对路径寻址

    尽量使用URI形式的绝对路径资源。它可以很容易的转变为URI,URL,File对象。尽量使用相对classpath的相对路径。不要使用绝对路径。使用上面 ClassLoaderUtil类的public static URL getExtendResource(String relative...

    JAVA上百实例源码以及开源项目源代码

     util实现Java图片水印添加功能,有添加图片水印和文字水印,可以设置水印位置,透明度、设置对线段锯齿状边缘处理、水印图片的路径,水印一般格式是gif,png,这种图片可以设置透明度、水印旋转等,可以参考代码...

    Java项目开发与毕业设计指导

    如果不能运行,将ch07文件夹下的swt.jar加入构建路径,然后在运行中的JVM参数中加入-Djava.library.path="dll所在目录的绝对路径"即可。 也可以在命令行下直接运行该程序,假设ch07文件夹放在D盘跟目录。则在cmd下...

    JAVA上百实例源码以及开源项目

     util实现Java图片水印添加功能,有添加图片水印和文字水印,可以设置水印位置,透明度、设置对线段锯齿状边缘处理、水印图片的路径,水印一般格式是gif,png,这种图片可以设置透明度、水印旋转等,可以参考代码...

    java源码包---java 源码 大量 实例

     util实现Java图片水印添加功能,有添加图片水印和文字水印,可以设置水印位置,透明度、设置对线段锯齿状边缘处理、水印图片的路径,水印一般格式是gif,png,这种图片可以设置透明度、水印旋转等,可以参考代码...

    java源码包4

     util实现Java图片水印添加功能,有添加图片水印和文字水印,可以设置水印位置,透明度、设置对线段锯齿状边缘处理、水印图片的路径,水印一般格式是gif,png,这种图片可以设置透明度、水印旋转等,可以参考代码...

    java源码包3

     util实现Java图片水印添加功能,有添加图片水印和文字水印,可以设置水印位置,透明度、设置对线段锯齿状边缘处理、水印图片的路径,水印一般格式是gif,png,这种图片可以设置透明度、水印旋转等,可以参考代码...

    java源码包2

     util实现Java图片水印添加功能,有添加图片水印和文字水印,可以设置水印位置,透明度、设置对线段锯齿状边缘处理、水印图片的路径,水印一般格式是gif,png,这种图片可以设置透明度、水印旋转等,可以参考代码...

    成百上千个Java 源码DEMO 4(1-4是独立压缩包)

    简单 Java图片加水印,支持旋转和透明度设置 摘要:Java源码,文件操作,图片水印 util实现Java图片水印添加功能,有添加图片水印和文字水印,可以设置水印位置,透明度、设置对线段锯齿状边缘处理、水印图片的路径,...

    FileUtils.java

    工具类:文件操作工具类,包括上传、下载、压缩zip文件、创建文件夹等与文件相关操作;上传文件时需注意路径选择,一般使用绝对路径上传,使用相对路径获取。

    成百上千个Java 源码DEMO 3(1-4是独立压缩包)

    简单 Java图片加水印,支持旋转和透明度设置 摘要:Java源码,文件操作,图片水印 util实现Java图片水印添加功能,有添加图片水印和文字水印,可以设置水印位置,透明度、设置对线段锯齿状边缘处理、水印图片的路径,...

    maven相关资料

    如果要使用绝对路径,需要加上file:前缀表示这是绝对路径; 对于FileSystemXmlApplicationContext: 默认表示的是两种: 1.没有盘符的是项目工作路径,即项目的根目录; 2.有盘符表示的是文件绝对路径. 如果要使用...

    resource-utils:Java项目的实用程序,用于获取或准备resourcelibdll ..文件,并适应普通的类,可运行的jar,Web容器等

    从classPath获取文件系统中的绝对路径 将资源从类路径复制到文件系统 UnicodeInputStream 一个适用于unicode文件的InputStream包装器。 提供此工具是因为某些Unicode文件具有BOM表头,但是java base io读取BOM作为...

    java面试宝典

    150、如何在JSP中包括绝对路径文件? 使用URLConnection即可。 37 151、在servlets和JSP之间能共享session对象吗? 37 152、如何设置cookie在某一时间后过期? 37 153、如何获得当前的sessions数? 37 154、能设置...

    一个开源的Java基础工具包

    6、com.baijob.commonTools.net.URLUtil 将相对、绝对路径转换为URL对象,用于网络或文件流的读写,Setting的配置依赖此工具包 四、线程相关工具类 1、com.baijob.commonTools.thread.BaseRunnable 此类实现了...

Global site tag (gtag.js) - Google Analytics