知识点
相关文章
更多最近更新
更多Java:IO/NIO篇,读写属性文件(properties)
2019-03-27 01:06|来源: 网路
1. 描述
尝试用多种方法读取属性文件。
- 测试打印系统属性;
- 测试读取、写入用户属性文件;
- 测试读取类库中的属性文件。
2. 示范代码
package com.clzhang.sample.io; import java.io.*; import java.util.*; import org.junit.Test; /** * 属性文件测试类, * 1.测试打印系统属性; * 2.测试读取、写入用户属性文件; * 3.测试读取类库中的属性文件。 * @author Administrator * */ public class PropertyTest { @SuppressWarnings("rawtypes") @Test public void testProp() throws Exception { // 打印系统属性 Properties propSystem = System.getProperties(); System.out.println("-------------------------"); for (Enumeration e = propSystem.propertyNames(); e.hasMoreElements();) { String key = (String) e.nextElement(); System.out.println(key + "=" + propSystem.getProperty(key)); } System.out.println("-------------------------"); // 方式一,硬编码指定属性文件位置 // String filename = "C:\\solr\\collection1\\conf\\prop.properties"; // 方式二,相对路径指定属性文件 String filename = "prop.properties"; File file = new File(filename); if(!file.exists()) { System.out.println("在用户默认目录:" + propSystem.get("user.dir") + "下面找不到:" + file.getName() + "文件!"); }else { // 读取属性配置文件 Properties prop = new Properties(); FileInputStream fis = new FileInputStream(file); prop.load(fis); fis.close(); // 读取属性值 System.out.println("log4j.appender.R=" + prop.getProperty("log4j.appender.R")); System.out.println("does_not_exist_node=" + prop.getProperty("dose_not_exist_node", "Hello")); // 更改属性值 prop.setProperty("log4j.appender.R", "你想怎样"); prop.setProperty("add_node", "Hello There!"); // 保存到文件 FileOutputStream fos = new FileOutputStream(filename); prop.store(fos, "a description of the property list"); fos.close(); System.out.println("-------------------------"); } // 方式三,系统类库中查找属性文件 String propFileInJar = "com/clzhang/sample/io/prop.properties"; InputStream is = this.getClass().getClassLoader().getResourceAsStream(propFileInJar); // 上面二行代码等同于下面二行任一行代码 // 相对路径 // InputStream is = com.clzhang.sample.io.PropertyTest.class.getResourceAsStream("prop.properties"); // 绝对路径 // InputStream is = com.clzhang.sample.io.PropertyTest.class.getResourceAsStream("/com/clzhang/sample/io/prop.properties"); if(is == null) { System.out.println("在系统类库中没有找到:" + propFileInJar + "文件!"); System.out.println("类路径:" + propSystem.get("java.class.path")); }else { Properties prop = new Properties(); prop.load(is); is.close(); System.out.println("log4j.appender.R=" + prop.getProperty("log4j.appender.R")); System.out.println("-------------------------"); } } }
转自:http://www.cnblogs.com/nayitian/archive/2013/01/23/2873347
相关问答
更多-
Java NIO和IO的区别[2022-02-20]
nio是new io的简称,从jdk1.4就被引入了,可以说不是什么新东西了。nio的主要作用就是用来解决速度差异的。举个例子:计算机处理的速度,和用户按键盘的速度。这两者的速度相差悬殊。如果按照经典的方法:一个用户设定一个线程,专门等待用户的输入,无形中就造成了严重的资源浪费:每一个线程都需要珍贵的cpu时间片,由于速度差异造成了在这个交互线程中的cpu都用来等待。 在以前的 Java IO 中,都是阻塞式 IO,NIO 引入了非阻塞式 IO。 -
Java NIO和IO的区别[2022-09-14]
最简单粗暴的理解就是: 1. io 非异步, 阻塞 2. Nio 异步, 非阻塞 你把 "异步" 及 "阻塞" 弄清楚了, 你就是大牛了 -
Java中nio与普通io有什么优势?[2022-11-22]
1,nio的主要作用就是用来解决速度差异的。举个例子:计算机处理的速度,和用户按键盘的速度,这两者的速度相差悬殊。 2,如果按照经典的方法:一个用户设定一个线程,专门等待用户的输入,无形中就造成了严重的资源浪费,每一个线程都需要珍贵的cpu时间片,由于速度差异造成了在这个交互线程中的cpu都用来等待。 3,传统的阻塞式IO,每个连接必须要开一个线程来处理,并且没处理完线程不能退出。 4,非阻塞式IO,由于基于反应器模式,用于事件多路分离和分派的体系结构模式,所以可以利用线程池来处理。事件来了就处理,处理完了 ... -
java文件读写[2022-08-03]
在网上查了很多关于修改文件的方法,不得其要领。自己想了两个取巧的办法,来解决对文件的修改。一:读取一个文件file1(FileReader and BufferedReader),进行操作后写入file2(FileWriter and BufferedWriter),然后删除file1,更改file2文件名为file1(Rename()方法)。二:创建字符缓冲流(StringBuffer),读取文件内容赋给字符缓冲流,再将字符缓冲流中的内容写入到读取的文件中。例如: test.txt 这里是放在d盘的根目录 ... -
我看java Properties类(在jdk中),发现java使用常量'='来保存属性文件,方法如下: private void store0(BufferedWriter bw, String comments, boolean escUnicode) throws IOException { if (comments != null) { writeComments(bw, comments); } bw.write("#" + new Date().t ...
-
Centos 7中的NIO和IO性能问题(第一次和第二次读写)(NIO and IO performance issue (first and second read and write) in Centos 7)[2022-06-20]
第一次测试运行缓慢,因为第一次必须从磁盘存储中加载文件。 在80ms内将文件加载到7200rpm驱动器上并不一定是异常的。 您的驱动器可能有大约8毫秒的搜索时间,我们不知道文件是否碎片。 加载后,文件存储在缓冲区缓存中,后续请求(甚至是不同的进程)的加载速度要快得多。 内核将文件存储在缓冲区缓存中,以加快常用文件的访问时间。 在进行基准测试时,通常最好在内存中执行测试...或者预取文件内容,使其存在于缓冲区缓存中。 The first test ran slow because the file had t ... -
当然,您可以使用池和有限数量的线程执行此操作并处理您自己的I / O,但您基本上会复制NIO为您提供的内容,但无法利用本机API。 您的系统无法很好地处理的问题之一是有数千个套接字执行缓慢的I / O,这是处理服务器推送,BitTorrent客户端或者非常繁忙的内容服务器所需要的。 更传统的请求/响应系统可以很好地与您的解决方案一起工作,但是再次,它们也可以在每个请求的线程上正常工作,因为通常遇到的第一个瓶颈是CPU或内存消耗。 Of course you can do this with a pool a ...
-
IO性能:选择器(NIO)与AsynchronousChannel(NIO.2)(IO performance: Selector (NIO) vs AsynchronousChannel(NIO.2))[2022-08-06]
我不认为NIO.2会比NIO具有更好的性能,因为NIO.2仍然使用select / poll系统调用和线程池来模拟异步IO。 一个例子是Netty在4.0.0中删除了NIO.2支持 ,因为作者认为NIO.2在Linux平台上没有带来比NIO更好的性能。 I don't think NIO.2 will have better performance than NIO, because NIO.2 still make use of select/poll system calls and thread po ... -
就文件复制而言,无论您使用什么平台或API,都不应存在显着差异。 瓶颈是磁盘旋转和头部寻求硬盘驱动器。 * 需要发生的是将硬盘内容移动到某个内存,然后将内存写入硬盘。 使用传统的java io流,会有额外的内存副本。 与磁盘速度相比,这仍然不是很大的浪费。 这可以很容易地验证,FileChannel.transferTo / From无法击败输入输出流复制的旧方式。 (*)当然,现在有更快的磁盘,但只要我们将磁盘定义为内存之后的下一个较慢的存储,该参数就成立了。 (**)我们可以将虚拟磁盘称为磁盘,它实际上 ...
-
“阻塞”意味着您调用的I / O方法阻塞调用线程,直到至少传输了一些数据,或者直到接受或连接操作成功或失败。 “非阻塞”意味着如果没有数据可以传输,I / O方法会立即返回适当的返回值或异常,或者连接操作在后台进行,可以在以后检查完成。 为了完整性,“异步”意味着I / O方法立即返回,但操作在后台继续,其结果可在适当时候通过另一个调用或回调获得。 Blocking basically refers to when a thread invokes a read() or write(), it is bl ...