`

资源文件路径获取

    博客分类:
  • java
阅读更多

 

标签: 杂谈分类: 技术转载区

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()也可用。

 

结论:

   1 class.getResource 如果参数是以“/” 开头的参数,则从ClassPath根下获取文件  

     不以“/”开头则从当前类的当前包查找文件 

   2 classloader.getResource  无论是否以"/"开头,都从classPath根目录获取文件 

 

   

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()就可以,从webApp根目录查找文件 。 

 

(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.setP

 

 

出自:http://blog.sina.com.cn/s/blog_4f8e228c0100mop2.html

 

分享到:
评论

相关推荐

    C# 获取文件路径

    在实际开发中,获取文件路径是非常重要的,例如在读取配置文件、加载资源文件、记录日志文件等场景中都需要获取文件路径。 控制台应用程序获取文件路径 在控制台应用程序中,可以使用以下方法获取文件路径: 1. `...

    java文件路径获取

    ### Java 文件路径获取方法详解 #### 一、引言 在Java开发中,经常会遇到需要获取文件路径的情况,尤其是在处理配置文件、图片等资源时。本文将详细介绍Java中获取文件路径的各种方法及其应用场景,帮助开发者更好...

    文件的Handle获取文件路径

    描述中提到,这种需求在网络上找到的相关资源较少,可能是因为它相对较为底层,且多数情况下可以通过其他方式获取文件路径。 在Windows系统中,我们可以利用内核模式下的API来实现这个功能。这里提到的`...

    javascript文件中获取当前文件路径

    在开发javascript插件的过程中,我们有时候需要获取当前JS文件的路径,用于自动加载一些图片、CSS等外部资源,但是javascript文件中并没有像PHP那样的__FILE__常量来供我们取得当前文件路径

    vb 实现文件拖拽显示文件路径

    在这里,我们将获取拖放的文件路径,并将其显示在TextBox中。代码示例: ```vb Private Sub TextBox1_DragDrop(sender As Object, e As DragEventArgs) Handles TextBox1.DragDrop Dim files() As String = e....

    WPF 如何找到资源文件路径包含 # 号的文件

    然而,当资源文件的路径中包含特殊字符如“#”时,可能会遇到访问问题。在本文中,我们将深入探讨如何在WPF中正确地找到和加载这些包含特殊字符的资源文件。 首先,了解WPF的资源系统是非常重要的。WPF支持两种类型...

    易语言根据文件句柄取文件路径源码

    在易语言中,我们可以通过系统提供的函数来获取或操作文件句柄,从而进行一系列的文件操作,比如读取、写入或者获取文件路径。 下面是一个基本的示例,展示了如何在易语言中根据文件句柄获取文件路径: ```易语言 ...

    delphi资源-文件路径

    - 如果需要从一个完整的文件路径中获取该文件所在的目录,以便进行其他操作(比如查找同一目录下的其他文件),则可以使用`ExtractFilePath`。 - 在开发软件时,我们经常需要根据当前执行程序的位置动态加载配置...

    获取当前鼠标选中的文件的路径

    4. 获取文件路径:在`InvokeCommand()`中,你可以调用`SHGetFileInfo()`,传入`CMICMDINFO`结构体,其中包含了用户在文件资源管理器中右键点击的文件的句柄。然后,`SHGetFileInfo()`将返回文件的详细信息,包括路径...

    Java中获取文件路径的几种方式

    这两种方法用于获取类路径下的资源文件路径,特别适用于JAR包或类加载器管理的资源。 ##### 示例代码: ```java URL xmlPath = this.getClass().getClassLoader().getResource("selected.txt"); System.out.println...

    拖动文件至对话框,获取文件路径

    ### 拖动文件至对话框,获取文件路径 在基于对话框的程序设计中,实现文件拖拽功能是一项常见的需求。特别是在Visual C++(以下简称VC)开发环境中,这一功能的实现不仅增强了用户界面的友好性,也提升了用户体验。...

    获取文件路径及名称详解

    此外,如果你在项目中需要处理的文件位于特定的资源目录下,你可以使用`Application.StartupPath`属性获取应用程序启动目录,然后结合`Path.Combine`方法构建完整的文件路径。 总的来说,理解和正确使用文件路径在...

    安卓获取文件路径到text的DEMO

    在安卓平台上,开发人员经常需要处理与文件操作相关的任务,比如获取文件路径并显示在文本控件中。这个“安卓获取文件路径到text的DEMO”就是一个很好的实践案例,它展示了如何通过系统的文件浏览器让用户选择文件,...

    android文件路径详解

    在Android系统中,文件路径是应用管理数据、资源和配置文件的关键。理解Android中的文件路径对于开发者来说至关重要,因为这关系到如何正确地存储、读取和操作文件。本篇文章将深入探讨Android文件路径的各个方面。 ...

    易语言根据文件句柄取文件路径

    "易语言根据文件句柄取文件路径"是这样一个功能,它允许开发者通过已有的文件句柄获取到文件的实际路径,这对于调试、日志记录或者权限控制等场景非常有用。下面我们将详细讲解这个知识点。 首先,文件句柄是操作...

    Mac- 获取文件路径工具

    描述中提到的是一个具体的资源链接,即"http://blog.csdn.net/hitwhylz/article/details/41989457",这是一个使用说明的文章,用户可以通过这个链接了解到如何安装和使用这个获取文件路径的插件或工具。通常,这类...

    C# WinForm 读取内嵌资源范例

    这样做的好处是,资源与程序一起打包,无需在运行时查找外部文件路径,提高了程序的便携性和安全性。 为了在C# WinForm中读取内嵌资源,我们通常会遵循以下步骤: 1. **添加资源**:在Visual Studio中,右键点击...

    易语言源码拖放文件取路径(拖放组件应用).zip

    4. **文件路径获取**:在“拖放”事件中,我们可以使用易语言的系统API函数来获取被拖放文件的完整路径,如“系统.文件路径”函数。获取路径后,可以进行进一步的操作,如打开、复制、移动或读取文件内容。 5. **...

    实现文件拖拽入窗体中读取文件路径.zip_C#_menbis

    在C#编程中,文件拖放(Drag and Drop)功能是一项常用的技术,它允许用户通过鼠标将文件从桌面或其他位置直接拖放到应用程序的窗口中,从而实现文件路径的读取。"menbis"可能是一个程序员的别名或者项目代号。下面...

    C# 拖入文件获取路径

    总结来说,C#中实现拖入文件获取路径的关键步骤包括:启用控件的拖放功能,处理`DragEnter`和`DragDrop`事件,以及在`DragDrop`事件中获取并处理文件路径。通过这些步骤,你可以创建一个用户友好的界面,使用户能够...

Global site tag (gtag.js) - Google Analytics