`
nannan408
  • 浏览: 1783865 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

通用Propterties工具类,兼容读jar同级目录的文件。

 
阅读更多
1.前言。
  properties文件的写方法比较不好用,折中写了个通用类。
2.例子。
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;

/**
 * 读取Properties综合类
 * 
 * @author lijn 2014-02-25
 */
public class PropertiesUtil {
	/**
	 * 得到某一个类的路径
	 * 
	 * @param name
	 * @return
	 */
	public static String getPath(Class name) {
		String strResult = null;
		if (System.getProperty("os.name").toLowerCase().indexOf("window") > -1) {
			strResult = name.getResource("/").toString().replace("file:/", "")
					.replace("%20", " ");
		} else {
			strResult = name.getResource("/").toString().replace("file:", "")
					.replace("%20", " ");
		}
		return strResult;
	}

	/**
	 * 读取所有的property
	 * 
	 * @param filename
	 *            properties文件路径
	 * @return 所有的property的集合(map形式)
	 */
	@SuppressWarnings("unchecked")
	public static Map<String, String> getPropties(String filename) {
		if (null == filename) {
			return null;
		}
		String filePath = getPath(PropertiesUtil.class) + filename;
		Properties props = new Properties();
		InputStream in = null;
		try {
			in = new BufferedInputStream(new FileInputStream(filePath));
			props.load(in);
			Map<String, String> map = new HashMap<String, String>();
			Enumeration en = props.propertyNames();
			while (en.hasMoreElements()) {
				String key = (String) en.nextElement();
				String Property = props.getProperty(key);
				map.put(key, Property);
			}
			return map;
			// 关闭资源
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			try {
				in.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		return null;
	}

	/**
	 * 获取某个property的值
	 * 
	 * @param filename
	 *            文件名
	 * @param key
	 *            property的key
	 * @return property的value
	 */
	public static String setProp(String filename, String key, String value) {
		if (null == filename || null == key) {
			return null;
		}
		String filePath = getPath(PropertiesUtil.class) + filename;
		Properties props = new Properties();
		FileOutputStream out = null;
		InputStream in = null;
		try {
			in = new BufferedInputStream(new FileInputStream(filePath));
			props.load(in);
			out = new FileOutputStream(new File(filePath));
			props.setProperty(key, value);
			props.store(out, "update");
			// 关闭资源
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			try {
				out.close();
				in.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		return null;
	}

	/**
	 * 获取某个property的值
	 * 
	 * @param filename
	 *            文件名
	 * @param key
	 *            property的key
	 * @return property的value
	 */
	public static String getProp(String filename, String key) {
		if (null == filename || null == key) {
			return null;
		}
		String filePath = getPath(PropertiesUtil.class) + filename;
		Properties props = new Properties();
		InputStream in = null;
		try {
			in = new BufferedInputStream(new FileInputStream(filePath));
			props.load(in);
			return props.getProperty(key);
			// 关闭资源
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			try {
				in.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		return null;
	}

	/**
	 * 需要将config.properies文件放到和本类同级目录下面
	 * 
	 * @param filename
	 * @param key
	 * @param value
	 * @return
	 */
	public static String setJarProp(String filename, String key, String value) {
		if (null == filename || null == key) {
			return null;
		}
		String filePath = getPath(PropertiesUtil.class) + filename;
		Properties props = new Properties();
		FileOutputStream out = null;
		InputStream in = null;
		try {
			in = PropertiesUtil.class.getResourceAsStream("config.properties");
			// System.out.println(PropertiesUtil.class.getClassLoader().getResource("config.properties"));
			BufferedInputStream b2 = new BufferedInputStream(in);
			props.load(b2);

			out = new FileOutputStream(filePath);
			props.setProperty(key, value);
			props.store(out, "update");
			// 关闭资源
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			try {
				out.close();
				in.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		return null;
	}

	/**
	 * 读写jar外的properties文件
	 * 
	 * @param filename
	 * @param key
	 * @param value
	 */
	public static void setExtralProperty(String filename, String key,
			String value) {
		if (null == filename || null == key) {
			return;
		}
		String outPathString = System.getProperty("java.class.path");
		outPathString = outPathString.substring(0, outPathString
				.lastIndexOf("\\") + 1);

		String filePath = outPathString + filename;
		Properties props = new Properties();
		FileOutputStream out = null;
		BufferedInputStream b2 = null;
		try {
			b2 = new BufferedInputStream(new FileInputStream(filePath));
			props.load(b2);

			out = new FileOutputStream(new File(filePath));
			props.setProperty(key, value);
			props.store(out, "update");
			// 关闭资源
		} catch (FileNotFoundException e) {
			setProp(filename,key,value);
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			try {
				if(null!=out){
				 out.close();
				}
				if(null!=b2){
				b2.close();
				}
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}

	}
	/**
	 * 以行的形式写ja内的文件
	 * 
	 * @param filename
	 * @param key
	 * @param value
	 */
	public static void writeLineInerFile(String filename, String content) {
		if (null == filename || null == content) {
			return;
		}
		String filePath = getPath(PropertiesUtil.class) + filename;
	
		FileOutputStream out = null;
		BufferedInputStream b2 = null;
		byte[] cont=new byte[4];
		String contentResult="";
		try {
			//先读取源文件的内容,再追加内容
			b2 = new BufferedInputStream(new FileInputStream(filePath));
			int res=b2.read(cont);
			while(res!=-1){
				contentResult=contentResult+new String(cont);
				res=b2.read(cont);
			}
			//追加
			contentResult+=content;
			out = new FileOutputStream(new File(filePath));
			out.write(contentResult.getBytes());
			// 关闭资源
		} catch (FileNotFoundException e) {
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			try {
				if(null!=out){
				 out.close();
				}
				if(null!=b2){
				b2.close();
				}
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}


	}
	/**
	 * 以行的形式写jar外的文件
	 * 
	 * @param filename
	 * @param key
	 * @param value
	 */
	public static void writeLineExtralFile(String filename, String content) {
		if (null == filename || null == content) {
			return;
		}
		String outPathString = System.getProperty("java.class.path");
		outPathString = outPathString.substring(0, outPathString
				.lastIndexOf("\\") + 1);

		String filePath = outPathString + filename;
		FileOutputStream out = null;
		BufferedInputStream b2 = null;
		byte[] cont=new byte[1024];
		String contentResult="";
		try {
			//先读取源文件的内容,再追加内容
			b2 = new BufferedInputStream(new FileInputStream(filePath));
			int res=b2.read(cont);
			while(res!=-1){
				contentResult=contentResult+new String(cont);
				res=b2.read(cont);
			}
			//追加
			contentResult+=content;
			out = new FileOutputStream(filePath);
			out.write(contentResult.getBytes());
			// 关闭资源
		} catch (FileNotFoundException e) {
			writeLineInerFile(filename,content);
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			try {
				if(null!=out){
				 out.close();
				}
				if(null!=b2){
				b2.close();
				}
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}

	}
	/**
	 * 读jar外的properties文件的属性
	 * 
	 * @param filename
	 * @param key
	 * @param value
	 */
	public static String getExtralProperty(String filename, String key) {
		if (null == filename || null == key) {
			return null;
		}
		String outPathString = System.getProperty("java.class.path");
		outPathString = outPathString.substring(0, outPathString
				.lastIndexOf("\\") + 1);

		String filePath = outPathString + filename;
		Properties props = new Properties();
		BufferedInputStream b2=null;
		try {
			 b2 = new BufferedInputStream(new FileInputStream(filePath));
			props.load(b2);
			return props.getProperty(key);
			// 关闭资源
		} catch (FileNotFoundException e) {
		  return getProp(filename,key);
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			try {
				if(null!=b2){
					b2.close();
				}
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		return null;

	}

	public static void main(String[] args) throws IOException {
		writeLineExtralFile("error.txt","fiowe");

	}
}


3.后记。
   如果是要读jar里面的src直属的properties,直接用ResourseBundle就可以了。
ResourceBundle resourceBundle = ResourceBundle.getBundle(filename
				.replace(".properties", ""));
		String temp = resourceBundle.getString(key);

0
0
分享到:
评论

相关推荐

    工具类的jar包

    自己写的一些工具类的打包 主要是文件操作 文件夹路径获取 xml文件操作 json对象转换

    南大通用数据库驱动 jar 包

    jar文件是一种特殊的文件格式,用于打包Java类库,包括类文件、资源文件等,方便分发和运行。南大通用数据库驱动的jar包内包含了所有必要的类和方法,使得Java程序能够识别并通信于南大通用数据库系统。 南大通用...

    jarjar-1.4.jar

    jarjar.jar是一款强大的Java工具,它的主要作用是对jar文件进行操作,包括但不限于重命名类、移动类甚至合并多个jar包。这在多库集成、构建大型项目或维护旧代码库时特别有用。jarjar-1.4.jar是该工具的一个版本,...

    dex转jar工具包以及jar文件查看

    “dex转jar工具”是一种实用程序,它能够读取.dex文件并将其内容转换回可读的Java类形式,即.jar文件。这个工具可能包含命令行接口或者图形用户界面,使得开发者能够轻松地处理.dex文件。转换过程通常包括解析.dex...

    Jar比较分析工具

    这个工具的主要目的是帮助开发者高效地找出两个不同版本JAR文件之间的差异。通过对比,开发者能够快速定位新版本中添加、修改或删除的类、方法和资源,从而节省大量手动检查的时间。其特点主要包括: 1. **操作简单...

    雪花算法工具类(java文件下载直接用)

    分布式全局唯一ID生成算法,

    JAR包查看器

    1. **浏览内容**:JAR包查看器允许用户直观地浏览JAR文件中的所有文件和目录结构,包括.class文件和其他资源文件,这对于理解和调试程序的结构非常有帮助。 2. **搜索功能**:通过内置的搜索功能,可以快速定位到...

    jar文件转java查看工具

    在IT行业中,jar文件是一种广泛使用的Java字节码格式,它包含了编译后的Java类、资源文件以及元数据。这些文件通常用于打包和分发Java应用程序或库。然而,有时开发者需要深入到jar文件内部,查看其中的源代码,以...

    错误Jar文件扫描工具

    当你用Mevan进行开发的时候,执行的时候报出一个Jar文件的异常,后面跟着一个长度,这就证明你的jar...你可以利用这个工具类对你的仓库进行扫描,并跳过源码jar包,最后会把无效的jar文件的完整目录及文件名打印出来。

    安卓备份文件ab文件解压工具

    这类文件是Android备份工具生成的,它包含了应用程序数据、系统设置甚至是整个手机的状态信息。本篇将详细介绍如何使用“安卓备份文件ab文件解压工具”以及与其相关的知识点。 首先,`ab`文件是一种加密和压缩的...

    JAR通用全触屏

    1. **JAR文件格式**:JAR(Java Archive)文件是Java平台特有的归档文件格式,用于集合多个类文件、资源文件和其他元数据。在游戏场景中,JAR文件包含了游戏的所有代码、图像、音频和其他必要资源,用户只需下载一个...

    利用 fernflower 反编译 jar包

    标题中的“利用Fernflower反编译jar包”指的是使用FernFlower这款工具,将.jar文件转换回可读的Java源代码。这有助于我们理解程序的工作原理,进行学习、调试或二次开发。FernFlower以其高效率和代码可读性而受到...

    apache ftp工具所需jar

    Apache FTP工具所需JAR文件是Java开发中用于与FTP服务器交互的重要组件,这些JAR库提供了方便的API,使得开发者可以轻松地实现FTP文件传输功能。以下是对这些JAR文件的详细说明: 1. `ant-jakarta-oro-1.6.1.jar`: ...

    Hello对应的可运行jar文件

    JAR文件是Java平台特有的打包机制,它将多个类文件、资源文件以及元数据等组合在一起,便于分发、存储和执行。在Java开发中,JAR文件常用于创建库、应用程序或部署Web应用。 描述中提到的"将Hello工程打包成Hello....

    jar 包查看工具

    1. **浏览内容**:用户可以通过工具直观地查看JAR文件内的目录结构,了解包含的类文件、资源配置和其他文件。 2. **搜索功能**:提供搜索框,允许用户输入关键词快速查找特定的类文件或资源。 3. **提取文件**:支持...

    ETL工具kettle的jar汇总.rar(亲测有效)

    1. **解压文件**:首先将"ETL工具kettle的jar汇总.rar"解压缩到本地目录。 2. **导入项目**:如果你使用的是IDE(如Eclipse或IntelliJ IDEA),你可以通过“构建路径”设置将解压后的JAR文件添加到项目的类路径中。...

    jar包代码反编译工具

    6. **批量处理**:对于包含大量类文件的大型jar包,工具往往提供批量反编译的功能,可以一次性处理整个jar包,生成对应的源代码目录结构。 7. **代码分析**:一些高级的反编译工具还提供代码分析功能,帮助开发者...

    commons-fileupload-1.2.1.jar和commons-io-1.3.2.jar程序文件

    `commons-io-1.3.2.jar`则是Apache Commons IO项目的一个较旧版本,它提供了一系列通用的IO操作工具类,这些工具类在处理文件、流、读写操作等方面非常有用。在处理文件上传时,Commons IO库可能被用来进行以下操作...

    Jar转换为Bundle工具

    标题中的“Jar转换为Bundle工具”指的是将传统的Java Archive (JAR) 文件转换为OSGI Bundle的过程。OSGI(Open Service Gateway Initiative)是一种模块化系统和Java服务框架,它允许在单个Java虚拟机(JVM)上运行...

    直接查看jar包的工具

    标题中的“直接查看jar包的工具”指的是专门用于浏览和分析Java Archive (JAR) 文件内容的软件。在Java开发中,JAR文件是将多个类文件、资源文件和其他相关文件打包在一起的标准格式,便于分发和执行。这类工具允许...

Global site tag (gtag.js) - Google Analytics