Java:IO/NIO篇,读写属性文件(properties)

2019-03-27 01:06|来源: 网路

1. 描述

尝试用多种方法读取属性文件。

  1. 测试打印系统属性;
  2. 测试读取、写入用户属性文件;
  3. 测试读取类库中的属性文件。

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

相关问答

更多
  • nio是new io的简称,从jdk1.4就被引入了,可以说不是什么新东西了。nio的主要作用就是用来解决速度差异的。举个例子:计算机处理的速度,和用户按键盘的速度。这两者的速度相差悬殊。如果按照经典的方法:一个用户设定一个线程,专门等待用户的输入,无形中就造成了严重的资源浪费:每一个线程都需要珍贵的cpu时间片,由于速度差异造成了在这个交互线程中的cpu都用来等待。 在以前的 Java IO 中,都是阻塞式 IO,NIO 引入了非阻塞式 IO。
  • 最简单粗暴的理解就是: 1. io 非异步, 阻塞 2. Nio 异步, 非阻塞 你把 "异步" 及 "阻塞" 弄清楚了, 你就是大牛了
  • 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 ...
  • 第一次测试运行缓慢,因为第一次必须从磁盘存储中加载文件。 在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 ...
  • 我不认为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 ...