最近学习流的时候看到了这个集合类可以和流一起想关联操作:
先上代码
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
public class Properties {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
newProperties();
loadProperties();
}
//生成新的properties文件
static void newProperties() {
BufferedWriter bw = null;
try {
bw = new BufferedWriter(new FileWriter("test.properties"));
java.util.Properties p = new java.util.Properties();
p.setProperty("美女1", "张馨予");
p.setProperty("美女2", "周韦彤");
p.store(bw, "Do you want fuck?");
bw.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/*test.properties:
*
#Do you want fuck?
#Thu Feb 09 10:33:03 CST 2012
美女2=周韦彤
美女1=张馨予
*/
//加载properties文件
static void loadProperties(){
BufferedReader br = null;
try {
br = new BufferedReader(new FileReader("test.properties"));
java.util.Properties p = new java.util.Properties();
p.load(br);
p.list(System.out);
br.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/*result:
-- listing properties --
美女2=周韦彤
美女1=张馨予*/
}
上面这段代码可以在当前目录下生成一个键值对的文本文件并读取这个文件,写入文件用的是store方法,该方法支持OutputStream和Reader参数的重载,第二个参数是注释。读取文件呢用的是load方法,该方法支持InputStream和Writer参数的重载。在写入和读取文件的时候都要强制捕获可能会抛出的一个IOException。
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.InvalidPropertiesFormatException;
import java.util.Properties;
public class XmlProperties {
/**
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
newXmlProperties();
loadXmlProperties();
}
//使用properties类创建一个新的xml
static void newXmlProperties() throws IOException{
Properties p = new Properties();
p.setProperty("大mimi", "干露露");
p.setProperty("长腿腿", "艾尚真");
BufferedOutputStream os = new BufferedOutputStream(new FileOutputStream("test.xml"));
p.storeToXML(os, "sex girl");
os.close();
}
/*test.xml:
*
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
<comment>sex girl</comment>
<entry key="大mimi">干露露</entry>
<entry key="长腿腿">艾尚真</entry>
</properties>*/
//读取properties创建的xml文件
static void loadXmlProperties() throws InvalidPropertiesFormatException, IOException{
BufferedInputStream bis = new BufferedInputStream(new FileInputStream("test.xml"));
Properties p = new Properties();
p.loadFromXML(bis);
bis.close();
p.list(System.out);
}
/*result:
-- listing properties --
大mimi=干露露
长腿腿=艾尚真*/
}
上面的代码是用properties类生成一个特定节点的xml文件和读取它,可以看的出来这个xml文件的格式是properties特定的,也就是写死的,一般应该不会用他读写xml,因为太不灵活了,写入xml是用storeXml方法,只能接受OutputStream的参数而不能接受Writer类的实例做参数,第二个参数是注释,第三个是使用的编码格式(可选)。也会抛出一个IOException。读取xml文件也是只能用InputStream做参数,抛出的异常是InvalidPropertiesFormatException,是propertie特定的异常。
练习:记录一个程序运行的次数,当满足指定时该就不可以再继续了。 练习:记录一个程序运行的次数,当满足指定时该就不可以再继续了。
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Properties;
public class Test {
class Program implements Runnable{
int i = 0;
public void run() {
// TODO Auto-generated method stub
System.out.println((++i)+" Run.... ");
}
}
static int addCount(File file) throws IOException{
int i = getRunCount(file);
Properties p = new Properties();
p.setProperty("runCount", String.valueOf(++i));
BufferedWriter wr = new BufferedWriter( new FileWriter(file));
p.store(wr,"runCount");
wr.flush();
wr.close();
return i;
}
static int getRunCount(File file) throws IOException{
if(file.exists()){
Properties p = new Properties();
FileInputStream bis = new FileInputStream(file);
p.load(bis);
String c = p.getProperty("runCount");
bis.close();
if(c == null){
return 0;
}
return Integer.parseInt(c);
}
return 0;
}
/**
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
Test.Program program = new Test().new Program();
File f = new File("runCount.properties");
int i = 0;
while(i < 10){
program.run();
i = addCount(f);
}
}
}
java读取properties文件的六种方法
使用j2se api读取properties文件的六种方法
1。使用java.util.properties类的load()方法
示例: inputstream in = lnew bufferedinputstream(new fileinputstream(name))
properties p = new properties()
p.load(in)
2。使用java.util.resourcebundle类的getbundle()方法
示例: resourcebundle rb = resourcebundle.getbundle(name locale.getdefault())
3。使用java.util.propertyresourcebundle类的构造函数
示例: inputstream in = new bufferedinputstream(new fileinputstream(name))
resourcebundle rb = new propertyresourcebundle(in)
4。使用class变量的getresourceasstream()方法
示例: inputstream in = jproperties.class.getresourceasstream(name)
properties p = new properties()
p.load(in)
5。使用class.getclassloader()所得到的java.lang.classloader的getresourceasstream()方法
示例: inputstream in = jproperties.class.getclassloader().getresourceasstream(name)
properties p = new properties()
p.load(in)
6。使用java.lang.classloader类的getsystemresourceasstream()静态方法
示例: inputstream in = classloader.getsystemresourceasstream(name)
properties p = new properties()
p.load(in)
补充
servlet中可以使用javax.servlet.servletcontext的getresourceasstream()方法
示例:inputstream in = context.getresourceasstream(path)
properties p = new properties()
p.load(in)
分享到:
相关推荐
- **Parameter 对象**:与基于参数化查询或存储过程的 Command 对象相关联的参数。Parameter 对象提供了传递参数至命令执行的方法,增强了安全性和效率。 - **Field 对象**:表示一列普通数据类型数据。每个 Field ...
3. **参数(Parameter)**:与Command对象相关联,用于传递SQL命令中的参数值。 4. **记录集(Recordset)**:是查询结果的载体,包含从数据库检索的一系列记录。Recordset对象支持导航、排序、过滤等功能,并且...
4. **Parameters集合**:与Command对象相关联,用于传递参数化查询中的参数。这对于防止SQL注入攻击非常有用。 5. **Properties集合**:所有ADO对象都有一个Properties集合,它包含了对象的特性,如连接字符串中的...
6. **对象的级联操作(Cascading)**: 通过设置 Cascade 属性,可以将操作(如保存、更新、删除)自动应用于与主体对象相关联的对象。 **三、Hibernate 的缓存机制** 1. **一级缓存(First-Level Cache)**: ...
3. 冯·诺伊曼阶段(von Neumann stages):冯·诺伊曼分层理论是指集合论中的一种构造集合的方法,它将每个集合与一个序数相关联,并通过累积过程来定义。这种方法可以用来分析集合的形成过程及其内部结构。 4. ...
10. **级联操作(Cascade)**:通过设置`cascade`属性,可以在操作主对象时自动处理相关联的子对象,如删除一个父对象时,可以选择同时删除所有子对象。 11. **第二级缓存(Second Level Cache)**:除了Session...
当客户机第一次调用一个Stateful Session Bean 时,容器必须立即在服务器中创建一个新的Bean实例,并关联到客户机上,以后此客户机调用Stateful Session Bean 的方法时容器会把调用分派到与此客户机相关联的Bean实例...
2. OWL 本体由 Individual 个体、Properties(Object Properties 对象属性和 Data Properties 数据属性)属性或关联、Class 类组成,三者分别和实例 Instances、扩展连接点 Slot、类 Class 相通信。 Classes(类) ...
- 方法是与类、结构体或枚举相关联的函数。 附属脚本(Subscripts)部分涉及: - 附属脚本语法和用法以及附属脚本选项。 - 附属脚本允许你通过下标语法来访问集合、列表或序列中的元素。 继承(Inheritance)部分...
- `properties`:一个键值对集合,用于存储与几何对象相关联的任意属性信息,如名称、颜色、高度等。 GeoJSON文件以JSON格式书写,因此可以轻松地在JavaScript中解析和操作。在Web应用程序中,可以通过JavaScript库...
6. 属性限制和存在性限制(Property Restrictions and Existential Restrictions):通过属性限制可以规定一个类的实例必须拥有某些属性,存在性限制是其中的一种,它声明类的实例必须与某一特定属性值相关联。...
- 使用 `join` 关键字可以在HQL中指定相关联的实体,这使得查询更加灵活。例如,`from Cat as cat inner join cat.mate as mate left outer join cat.kittens as kitten`。 - 支持多种连接类型,包括 `inner join`...
- 一对一关联:在映射文件中,通过`association`标签定义相关联的对象,映射其属性。 - 一对多关联:使用`collection`标签,表示一个实体包含多个子实体的列表,如用户和订单的关系。 6. MyBatis的自定义: - ...
在使用控制反转的情况下,业务逻辑的流程是由对象关系图来决定的,该对象关系图由装配器负责实例化,这种实现方式还可以将对象之间的关联关系的定义抽象化。绑定的过程是通过“依赖注入”实现的。 依赖注入是在编译...
- **fetch连接**:用于在一次查询中同时初始化相关联的对象或集合。 - 示例:`from Cat as cat join fetch cat.mate left join fetch cat.kittens`。 - **限制**:`fetch`连接不能在使用`scroll()`或`iterate()`...
`ApplicationCommands`是WPF中预定义的一组命令,它们通常与应用程序级别的操作相关联,例如打开文件、打印等。以下是一些常用的`ApplicationCommands`: - **CancelPrint**: 取消打印操作。 - **Close**: 关闭当前...
2. Picklist Value Set:Picklist Value Set(Picklist值集)是一组相关联的Picklist选项,它们共同构成了一个逻辑集合。每个值集可以包含多个值,每个值都有唯一的标识符和显示文本。 二、Picklist配置步骤 1. ...
- **Property-ref**:关联类中用于和主控类相关联的属性名,默认为主键属性名。 - **单向一对多**: - 配置在一方,表示多的一方记录由Hibernate负责加载后存放在主控方的`Collection`类型属性中。 - **双向一...
每个实例都与其在Property模块中分配的段属性相关联。在全局坐标系统中定位零件实例,可以形成装配。如果在Part模块中修改原始零件,当返回到Assembly模块时,ABAQUS/CAE会自动更新所有相关实例。 【Boolean ...