首页>>后端>>SpringBoot->javaproperties类(javaproperties文件)

javaproperties类(javaproperties文件)

时间:2023-12-01 本站 点击:0

java编程中Properties类的具体作用和使用!

如果不熟悉 java.util.Properties类,那么现在告诉您它是用来在一个文件中存储键-值对的,其中键和值是用等号分隔的。(如清单 1 所示)。最近更新的java.util.Properties 类现在提供了一种为程序装载和存储设置的更容易的方法: loadFromXML(InputStreamis) 和 storeToXML(OutputStream os, String comment) 方法。

一下是详细的说明,希望能给大家带来帮助。

清单 1. 一组属性示例

foo=bar

fu=baz

将清单 1 装载到 Properties 对象中后,您就可以找到两个键( foo 和 fu )和两个值( foo 的 bar 和 fu 的baz )了。这个类支持带 \u 的嵌入 Unicode 字符串,但是这里重要的是每一项内容都当作 String 。

清单2 显示了如何装载属性文件并列出它当前的一组键和值。只需传递这个文件的 InputStream 给 load()方法,就会将每一个键-值对添加到 Properties 实例中。然后用 list() 列出所有属性或者用 getProperty()获取单独的属性。

清单 2. 装载属性

import java.util.*;

import java.io.*;

public class LoadSample {

public static void main(String args[]) throws Exception {

Properties prop = new Properties();

FileInputStream fis =

new FileInputStream("sample.properties");

prop.load(fis);

prop.list(System.out);

System.out.println("\nThe foo property: " +

prop.getProperty("foo"));

}

}

运行 LoadSample 程序生成如清单 3 所示的输出。注意 list() 方法的输出中键-值对的顺序与它们在输入文件中的顺序不一样。Properties 类在一个散列表(hashtable,事实上是一个 Hashtable 子类)中储存一组键-值对,所以不能保证顺序。

清单 3. LoadSample 的输出

-- listing properties --

fu=baz

foo=bar

The foo property: bar

XML 属性文件

这里没有什么新内容。 Properties 类总是这样工作的。不过,新的地方是从一个 XML 文件中装载一组属性。它的 DTD 如清单 4 所示。

清单 4. 属性 DTD

?xml version="1.0" encoding="UTF-8"?

!-- DTD for properties --

!ELEMENT properties ( comment?, entry* )

!ATTLIST properties version CDATA #FIXED "1.0"

!ELEMENT comment (#PCDATA)

!ELEMENT entry (#PCDATA)

!ATTLIST entry key CDATA #REQUIRED

如果不想细读 XML DTD,那么可以告诉您它其实就是说在外围 properties 标签中包装的是一个comment 标签,后面是任意数量的 entry 标签。对每一个 entry标签,有一个键属性,输入的内容就是它的值。清单 5 显示了 清单 1中的属性文件的 XML 版本是什么样子的。

清单 5. XML 版本的属性文件

?xml version="1.0" encoding="UTF-8"?

!DOCTYPE properties SYSTEM " "

properties

commentHi/comment

entry key="foo"bar/entry

entry key="fu"baz/entry

/properties

如果清单 6 所示,读取 XML 版本的 Properties 文件与读取老格式的文件没什么不同。

清单 6. 读取 XML Properties 文件

import java.util.*;

import java.io.*;

public class LoadSampleXML {

public static void main(String args[]) throws Exception {

Properties prop = new Properties();

FileInputStream fis =

new FileInputStream("sampleprops.xml");

prop.loadFromXML(fis);

prop.list(System.out);

System.out.println("\nThe foo property: " +

prop.getProperty("foo"));

}

}

关于资源绑定的说明

虽然 java.util.Properties 类现在除了支持键-值对,还支持属性文件作为 XML 文件,不幸的是,没有内置的选项可以将ResourceBundle 作为一个 XML 文件处理。是的, PropertyResourceBundle 不使用 Properties对象来装载绑定,不过装载方法的使用是硬编码到类中的,而不使用较新的 loadFromXML() 方法。

运行清单 6 中的程序产生与原来的程序相同的输出,如 清单 2所示。

保存 XML 属性

新的 Properties 还有一个功能是将属性存储到 XML 格式的文件中。虽然 store() 方法仍然会创建一个类似 清单 1所示的文件,但是现在可以用新的 storeToXML() 方法创建如 清单 5 所示的文件。只要传递一个 OutputStream和一个用于注释的 String 就可以了。清单 7 展示了新的 storeToXML() 方法。

清单 7. 将 Properties 存储为 XML 文件

import java.util.*;

import java.io.*;

public class StoreXML {

public static void main(String args[]) throws Exception {

Properties prop = new Properties();

prop.setProperty("one-two", "buckle my shoe");

prop.setProperty("three-four", "shut the door");

prop.setProperty("five-six", "pick up sticks");

prop.setProperty("seven-eight", "lay them straight");

prop.setProperty("nine-ten", "a big, fat hen");

FileOutputStream fos =

new FileOutputStream("rhyme.xml");

prop.storeToXML(fos, "Rhyme");

fos.close();

}

}

运行清单 7 中的程序产生的输出如清单 8 所示。

清单 8. 存储的 XML 文件

?xml version="1.0" encoding="UTF-8"?

!DOCTYPE properties SYSTEM " "

properties

commentRhyme/comment

entry key="seven-eight"lay them straight/entry

entry key="five-six"pick up sticks/entry

entry key="nine-ten"a big, fat hen/entry

entry key="three-four"shut the door/entry

entry key="one-two"buckle my shoe/entry

/properties

在这里改了一个例子:

import java.io.FileInputStream;

import java.io.IOException;

import java.io.InputStream;

import java.util.Properties;

/**

* 实现properties文件的读取

* @author haoxuewu

*/

public class Test {

public static void main(String[] args) {

try {

long start = System.currentTimeMillis();

InputStream is = new FileInputStream("conf.properties");

Properties p = new Properties();

p.load(is);

is.close();

System.out.println("SIZE : " + p.size());

System.out.println("homepage : " + p.getProperty("homepage"));

System.out.println("author : " + p.getProperty("author"));

System.out.println("school : " + p.getProperty("school"));

long end = System.currentTimeMillis();

System.out.println("Cost : " + (end - start));

} catch (IOException ioe) {

ioe.printStackTrace();

}

}

}

conf.properties

# Configuration file

homepage =

author = bbflyerwww

school = jilinjianzhugongchengxueyuan

Result

SIZE:3

homepage :

author : bbflyerwww

school : jilinjianzhugongchengxueyuan

求用java读写properties文件的代码

Java代码

package com.LY;

import java.io.BufferedInputStream;

import java.io.FileInputStream;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.InputStream;

import java.io.OutputStream;

import java.util.Enumeration;

import java.util.Properties;

public class TestMain {

// 根据key读取value

public static String readValue(String filePath, String key) {

Properties props = new Properties();

try {

InputStream in = new BufferedInputStream(new FileInputStream(

filePath));

props.load(in);

String value = props.getProperty(key);

System.out.println(key + value);

return value;

} catch (Exception e) {

e.printStackTrace();

return null;

}

}

// 读取properties的全部信息

public static void readProperties(String filePath) {

Properties props = new Properties();

try {

InputStream in = new BufferedInputStream(new FileInputStream(

filePath));

props.load(in);

Enumeration en = props.propertyNames();

while (en.hasMoreElements()) {

String key = (String) en.nextElement();

String Property = props.getProperty(key);

System.out.println(key + Property);

}

} catch (Exception e) {

e.printStackTrace();

}

}

// 写入properties信息

public static void writeProperties(String filePath, String parameterName,

String parameterValue) {

Properties prop = new Properties();

try {

InputStream fis = new FileInputStream(filePath);

// 从输入流中读取属性列表(键和元素对)

prop.load(fis);

// 调用 Hashtable 的方法 put。使用 getProperty 方法提供并行性。

// 强制要求为属性的键和值使用字符串。返回值是 Hashtable 调用 put 的结果。

OutputStream fos = new FileOutputStream(filePath);

prop.setProperty(parameterName, parameterValue);

// 以适合使用 load 方法加载到 Properties表中的格式,

// 将此 Properties 表中的属性列表(键和元素对)写入输出流

prop.store(fos, "Update '" + parameterName+ "' value");

} catch (IOException e) {

System.err.println("Visit " + filePath + " for updating "

+ parameterName + " value error");

}

}

public static void main(String[] args) {

readValue("info.properties", "url");

writeProperties("info.properties", "age","22");

readProperties("info.properties");

System.out.println("OK");

}

}

java中用Properties类加载配置文件

一个Properties只能加载一个问题,如果你需要加载多个的话只能多写几个了。

例如:

Properties prop = new Properties();

prop.load(ConfigUtil.class.getClassLoader().getResourceAsStream("config.properties"));

Properties prop1 = new Properties();

prop1.load(ConfigUtil.class.getClassLoader().getResourceAsStream("config.properties1"));

java中的Properties是什么类呢,什么意思呢

properties是配置文件,主要的作用是通过修改配置文件可以方便的修改代码中的参数,实现不用改class文件即可灵活变更参数。

解释:java运行中java文件会变成class文件,之后无法通过反编译找到原样的代码,这样的话,如果java类中某个参数变更,就很难灵活的实现参数修改,这个时候properties 文件就能很灵活的实现配置,减少代码的维护成本和提高开发效率。

java的properties文件怎么写

最常用读取properties文件的方法

InputStream in = getClass().getResourceAsStream("资源Name");这种方式要求properties文件和当前类在同一文件夹下面。如果在不同的包中,必须使用:

InputStream ins = this.getClass().getResourceAsStream("/cn/zhao/properties/testPropertiesPath2.properties");

Java中获取路径方法

获取路径的一个简单实现

反射方式获取properties文件的三种方式

1 反射方式获取properties文件最常用方法以及思考:

Java读取properties文件的方法比较多,网上最多的文章是"Java读取properties文件的六种方法",但在Java应用中,最常用还是通过java.lang.Class类的getResourceAsStream(String name) 方法来实现,但我见到众多读取properties文件的代码中,都会这么干:

InputStream in = getClass().getResourceAsStream("资源Name");

这里面有个问题,就是getClass()调用的时候默认省略了this!我们都知道,this是不能在static(静态)方法或者static块中使用的,原因是static类型的方法或者代码块是属于类本身的,不属于某个对象,而this本身就代表当前对象,而静态方法或者块调用的时候是不用初始化对象的。

问题是:假如我不想让某个类有对象,那么我会将此类的默认构造方法设为私有,当然也不会写别的共有的构造方法。并且我这个类是工具类,都是静态的方法和变量,我要在静态块或者静态方法中获取properties文件,这个方法就行不通了。

那怎么办呢?其实这个类就不是这么用的,他仅仅是需要获取一个Class对象就可以了,那还不容易啊--

取所有类的父类Object,用Object.class难道不比你的用你正在写类自身方便安全吗 ?呵呵,下面给出一个例子,以方便交流。

import java.util.Properties;

import java.io.InputStream;

import java.io.IOException;

/**

* 读取Properties文件的例子

* File: TestProperties.java

* User: leizhimin

* Date: 2008-2-15 18:38:40

*/

public final class TestProperties {

private static String param1;

private static String param2;

static {

Properties prop = new Properties();

InputStream in = Object. class .getResourceAsStream( "/test.properties" );

try {

prop.load(in);

param1 = prop.getProperty( "initYears1" ).trim();

param2 = prop.getProperty( "initYears2" ).trim();

} catch (IOException e) {

e.printStackTrace();

}

}

/**

* 私有构造方法,不需要创建对象

*/

private TestProperties() {

}

public static String getParam1() {

return param1;

}

public static String getParam2() {

return param2;

}

public static void main(String args[]){

System.out.println(getParam1());

System.out.println(getParam2());

}

}

运行结果:

151

152

当然,把Object.class换成int.class照样行,呵呵,大家可以试试。

另外,如果是static方法或块中读取Properties文件,还有一种最保险的方法,就是这个类的本身名字来直接获取Class对象,比如本例中可写成TestProperties.class,这样做是最保险的方法

2 获取路径的方式:

File fileB = new File( this .getClass().getResource( "" ).getPath());

System. out .println( "fileB path: " + fileB);

2.2获取当前类所在的工程名:

System. out .println("user.dir path: " + System. getProperty ("user.dir"))span style="background-color: white;"3 获取路径的一个简单的Java实现/span

/**

*获取项目的相对路径下文件的绝对路径

*

* @param parentDir

*目标文件的父目录,例如说,工程的目录下,有lib与bin和conf目录,那么程序运行于lib or

* bin,那么需要的配置文件却是conf里面,则需要找到该配置文件的绝对路径

* @param fileName

*文件名

* @return一个绝对路径

*/

public static String getPath(String parentDir, String fileName) {

String path = null;

String userdir = System.getProperty("user.dir");

String userdirName = new File(userdir).getName();

if (userdirName.equalsIgnoreCase("lib")

|| userdirName.equalsIgnoreCase("bin")) {

File newf = new File(userdir);

File newp = new File(newf.getParent());

if (fileName.trim().equals("")) {

path = newp.getPath() + File.separator + parentDir;

} else {

path = newp.getPath() + File.separator + parentDir

+ File.separator + fileName;

}

} else {

if (fileName.trim().equals("")) {

path = userdir + File.separator + parentDir;

} else {

path = userdir + File.separator + parentDir + File.separator

+ fileName;

}

}

return path;

}

4 利用反射的方式获取路径:

InputStream ips1 = Enumeration . class .getClassLoader() .getResourceAsStream( "cn/zhao/enumStudy/testPropertiesPath1.properties" );

InputStream ips2 = Enumeration . class .getResourceAsStream( "testPropertiesPath1.properties" );

InputStream ips3 = Enumeration . class .getResourceAsStream( "properties/testPropertiesPath2.properties" );


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:/SpringBoot/6064.html