`
blue2048
  • 浏览: 183617 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

java各种获取资源文件的方式

阅读更多

 

  • 绝对路径文件读取,最简单,最直接的方式

 

  1. /** 
  2.  * 从绝对路径读取文件,最基本的文件读取方式 
  3.  *  
  4.  * @author lihzh 
  5.  * @data 2012-4-11 下午9:33:44 
  6.  */ 
  7. @Test 
  8. public void testGetFileFromAbsolutePath() { 
  9.     String dirPathNotUnderClasspath = "D:\\workspace-home\\JavaDemo\\conf"
  10.     File dirFile = new File(dirPathNotUnderClasspath); 
  11.     AssertDirFile(dirFile); 
  12.  
  13.        /** 
  14.  * 对文件夹类型文件的断言 
  15.  *  
  16.  * @param dirFile 
  17.  * @author lihzh 
  18.  * @data 2012-4-11 下午9:49:14 
  19.  */ 
  20. private void AssertDirFile(File dirFile) { 
  21.     // 文件存在 
  22.     Assert.assertTrue(dirFile.exists()); 
  23.     // 是绝对路径 
  24.     Assert.assertTrue(dirFile.isAbsolute()); 
  25.     // 是个文件夹 
  26.     Assert.assertTrue(dirFile.isDirectory()); 
  27.     // 获取文件夹下所有文件 
  28.     File[] files = dirFile.listFiles(); 
  29.     // 下面有文件 
  30.     Assert.assertNotNull(files); 
  31.     // 且只有一个 
  32.     Assert.assertEquals(1, files.length); 
  33.     // 文件名匹配 
  34.     Assert.assertEquals("test.properties", files[0].getName()); 

 

  •  相对于执行编译命令路径的方式读取

 

  1. /** 
  2.  * 从相对路径读取文件,相对于编译路径,在Eclipse中即为工程所在根目录。 本质还是绝          * 对路径读取。 
  3.  *  
  4.  * @author lihzh 
  5.  * @data 2012-4-11 下午9:51:10 
  6.  */ 
  7. @Test 
  8. public void testGetFileFromRelativePath() { 
  9.     String dirPath = System.getProperty("user.dir") + "\\conf"
  10.     File dirFile = new File(dirPath); 
  11.     AssertDirFile(dirFile); 

 

  • 用URI构造本地文件读取

 

  1.  /** 
  2.  * 构造URI/URL格式的文件路径,读取本地文件 
  3.  *  
  4.  * @author lihzh 
  5.  * @throws URISyntaxException 
  6.  * @throws MalformedURLException 
  7.  * @data 2012-4-11 下午10:25:00 
  8.  */ 
  9. @Test 
  10. public void testGetFileFromURIPath() throws URISyntaxException, 
  11.         MalformedURLException { 
  12.     // 直接用URI构造, 由于URI和URL可以互转,所以如果为URL直接用URL.toURI转换成URI即可 
  13.     URI uri = new URI("file:/D:/workspace-home/JavaDemo/conf/"); 
  14.     File dirFile = new File(uri); 
  15.     AssertDirFile(dirFile); 
特别说明:用URI/URL的方式构造路径是个人比较推荐的,可以解决一些路径读取的问题。例如:Spring会对URI/URL格式的路径进行专有处理可以准确定位的位置,而直接使用绝对路径,在用Classpath和FileSystem两种不同的初始化方式下,可能会出现错误。

 


 

  • 利用ClassLoader读取Jar包内部文件

 

  1. /** 
  2.  * 从依赖的Jar包中读取文件, Jar包内的文件是无法用File读取的,只能用Stream的方式读取。 
  3.  *  
  4.  * @author lihzh 
  5.  * @throws URISyntaxException 
  6.  * @throws IOException 
  7.  * @data 2012-4-11 下午11:07:58 
  8.  */ 
  9. @Test 
  10. public void testGetFileFromJarInClassPath() throws URISyntaxException, 
  11.         IOException { 
  12.     Enumeration<URL> urls = this.getClass().getClassLoader().getResources("conf/test.properties"); 
  13.     URL url = this.getClass().getClassLoader().getResource("conf/test.properties"); 
  14.     Assert.assertTrue(urls.hasMoreElements()); 
  15.     Assert.assertNotNull(url); 
  16.     // 注意两种不同调用方式的路径的区别,此处如果不以“/” 开头,会被当作相对于当前类所在的包类处理,自然无法找到。 
  17.     // 因为在Class的getResource方法的开头,有一个resolveName方法,处理了传入的路径格式问题。而ClassLoader类里的 
  18.     // getResource和getResources均无此处理。使用时候需要用心。 
  19.     URL clzURL = this.getClass().getResource("/conf/test.properties"); 
  20.     URL nullURL = this.getClass().getResource("conf/test.properties"); 
  21.     Assert.assertNotNull(clzURL); 
  22.     Assert.assertNull(nullURL); 
  23.     URL thisClzURL = this.getClass().getResource(""); 
  24.     Assert.assertNotNull(thisClzURL); 
  25.     // 开始读取文件内容 
  26.     InputStream is = this.getClass().getResourceAsStream("/conf/test.properties"); 
  27.     Properties props = new Properties(); 
  28.     props.load(is); 
  29.     Assert.assertTrue(props.containsKey("test.key")); 
  30.     Assert.assertEquals("thisIsValue", props.getProperty("test.key")); 

 


 

  • 读取Jar内某路径下的所有文件

 

  1. /** 
  2.  * 从ClassPath中的Jar包读取某文件夹下的所有文件 
  3.  *  
  4.  * @author lihzh 
  5.  * @throws IOException  
  6.  * @data 2012-4-13 下午10:22:24 
  7.  */ 
  8. @Test 
  9. public void testGetFilesFromJarInClassPathWithDirPath() throws IOException { 
  10.     String dirPath = "conf/"
  11.     URL url = this.getClass().getClassLoader().getResource(dirPath); 
  12.     Assert.assertNotNull(url); 
  13.     String urlStr = url.toString(); 
  14.     // 找到!/ 截断之前的字符串 
  15.     String jarPath = urlStr.substring(0, urlStr.indexOf("!/") + 2); 
  16.     URL jarURL = new URL(jarPath); 
  17.     JarURLConnection jarCon = (JarURLConnection) jarURL.openConnection(); 
  18.     JarFile jarFile = jarCon.getJarFile(); 
  19.     Enumeration<JarEntry> jarEntrys = jarFile.entries(); 
  20.     Assert.assertTrue(jarEntrys.hasMoreElements()); 
  21.     Properties props = new Properties(); 
  22.     while (jarEntrys.hasMoreElements()) { 
  23.         JarEntry entry = jarEntrys.nextElement(); 
  24.         // 简单的判断路径,如果想做到想Spring,Ant-Style格式的路径匹配需要用到正则。 
  25.         String name = entry.getName(); 
  26.         if (name.startsWith(dirPath) && !entry.isDirectory()) { 
  27.             // 开始读取文件内容 
  28.             InputStream is = this.getClass().getClassLoader().getResourceAsStream(name); 
  29.             Assert.assertNotNull(is); 
  30.             props.load(is); 
  31.         } 
  32.     } 
  33.     Assert.assertTrue(props.containsKey("test.key")); 
  34.     Assert.assertEquals("thisIsValue", props.getProperty("test.key")); 
  35.     Assert.assertTrue(props.containsKey("test.key.two")); 
  36.     Assert.assertEquals("thisIsAnotherValue", props.getProperty("test.key.two")); 

 


对于不在ClassPath下的Jar包的读取,当作一个本地文件用JarFile读取即可。路径可使用绝对路径。或者用上面的url.getConnection也可以处理。这里不再实现。

PS:附件是测试用的jar包。
 
分享到:
评论

相关推荐

    java 获取i18n资源文件 java 获取i18n资源文件

    java 获取i18n资源文件 java 获取i18n资源文件java 获取i18n资源文件 java 获取i18n资源文件java 获取i18n资源文件 java 获取i18n资源文件java 获取i18n资源文件 java 获取i18n资源文件java 获取i18n资源文件 java ...

    java 静态代码块通过类加载器获取资源文件例子

    本案例聚焦于如何利用静态代码块结合类加载器来高效地获取资源文件,尤其是属性配置文件。下面我们将深入探讨这两个概念及其在实际开发中的作用。 首先,静态代码块是在类被加载到JVM(Java虚拟机)时执行的一段...

    JAVA获取FTP文件列表

    ### JAVA获取FTP文件列表知识点详解 #### 一、概述 在现代软件开发中,FTP(File Transfer Protocol)是一种广泛使用的协议,用于在网络上进行文件传输。本文档将详细介绍一个基于Java的实用工具类`FtpClientUtil`...

    java源码 java获取音频文件 播放时长AudioDemo 2018127

    此外,`AudioDemo`可能还涉及了异常处理,因为读取音频文件或获取其元数据时可能会出现各种问题,如文件不存在、格式不支持等。因此,适当的异常处理是必要的,确保程序在遇到错误时能优雅地退出或提供错误信息。 ...

    java文件路径获取

    假设有一个位于`com.explorers`包下的`Test.java`类,以及一个名为`abc.jpg`的资源文件,我们可以通过以下几种方式获取该资源: 1. 使用`Class.getResourceAsStream`: ```java InputStream inputStream = Test....

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

    例如,通过`this.getClass().getResource()`方法可以获取资源文件的路径。 ##### 示例代码: ```java File f = new File(this.getClass().getResource("/").getPath()); System.out.println(f.getAbsolutePath()); ...

    使用java代码获取yml文件中指定的内容(csdn)————程序.pdf

    接着,通过`URL`对象定位到"application.yml"文件,这里使用了`Test02.class.getClassLoader().getResource()`方法,它可以从类路径中找到资源文件。 ```java Yaml yaml = new Yaml(); URL url = Test02.class....

    java获取网络音乐文件时长

    在Java编程中,获取网络音乐文件的时长是一项常见的任务,尤其在开发音乐播放器或者处理音频流的应用中。下面将详细介绍三种不同的方法来实现这一功能。 ### 方法一:使用`BufferedInputStream`和`AudioInputStream...

    Java获取播放文件的时长

    以上就是使用Java获取播放文件时长的几种常见方法。需要注意的是,每种方法都有其适用范围,比如对于不同的文件格式,可能需要选择不同的库或方法。同时,这些方法可能需要处理错误和异常,以及适当地释放资源,确保...

    java获取压缩文件的名称并解压

    本文将深入探讨如何使用Java来获取ZIP文件的名称以及如何高效地解压缩这些文件,特别是通过多线程来提高性能。 首先,我们需要引入Java的内置库`java.util.zip`,它提供了处理ZIP文件的类和接口。主要使用的类有`...

    java截取wave文件,java获取wave文件头信息

    这是一个完整的myeclipse项目,主要实现的功能有: 1.用java获取wave类型的音频文件头信息; 2.根据传入参数截取指定时间段内的音频片段 改资源为本人原创,下载后导入myeclipse可以直接运行

    java解析资源文件

    - **类路径加载**:Java提供`Class.getResource()`和`Class.getResourceAsStream()`方法来从类路径中获取资源。例如,如果你有一个名为`config.properties`的配置文件,你可以通过如下方式获取: ```java ...

    获取上传的文件行数的最快速的java代码

    总结起来,获取大文件的行数,关键在于使用高效的流式处理方式,并合理控制内存使用。在Java中,`BufferedReader`是实现这一目标的理想选择。同时,对于网络上的文件,我们需要结合相应的文件传输工具或服务API来...

    java 读取资源文件

    在Java编程中,读取资源文件是常见的任务,特别是在配置应用程序、处理文本数据或加载本地化内容时。本文将深入探讨如何使用Java读取资源文件,特别是properties类型的文件。 资源文件通常存储在项目的类路径...

    JAVA中获取各种路径

    此方法返回类的资源路径,通常用于获取与类相关的资源文件,例如`/D:/TEST/WebRoot/WEB-INF/classes/pack/`,这在加载配置文件、模板等静态资源时非常有用。 #### (2) 获取工作目录路径:`System.getProperty("user...

    java读取配置文件

    最基础的方式是使用Java的I/O流来读取文本配置文件(通常是.properties格式)。例如,`java.io.FileInputStream`可以用来打开文件,然后`java.util.Properties`类可以加载并解析配置文件。以下是一个简单的示例: ...

    java代码在window获取linux文件

    在Java编程环境中,有时我们需要在Windows系统中远程访问Linux服务器以获取或操作文件。`JSch`库提供了一个这样的解决方案,它是一个纯Java实现的SSH2库,允许开发者连接到远程计算机并执行命令,传输文件等。本篇将...

    Java文件下载的几种方式

    本地文件下载适用于服务器上的文件分享,网络文件下载则适用于从远程服务器获取资源。而支持断点续传的下载方式则是在处理大文件或不稳定网络环境下的优选方案。理解这些不同的下载方式有助于开发者构建更高效、更...

    Java工程中资源文件的用法

    ### Java工程中资源文件的用法详解 #### 概述 资源文件,通常指的是`.properties`文件,这类文件采用键值对的形式存储数据,广泛应用于Java项目中存储配置信息、国际化字符串等。通过使用`java.util.Properties`类...

    java读取图片文件流

    java读取本地图片文件获取流!java读取本地图片文件获取流!

Global site tag (gtag.js) - Google Analytics