• 2008-12-04

    利用properties操作文件及修改

    版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
    http://zhutong7758.blogbus.com/logs/32124671.html

    package cn.net.withub.xfgl.common;

    /**
    * @author YuLuo
    */

    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.Properties;
    //前一篇已介绍此方法
    import cn.net.withub.xfgl.common.ToUnicode;

    public class CreatePro {
    //读文件
    public static String readFile(String filePath, String parameterName)
    throws IOException, FileNotFoundException {
    String result = null;
    File file = new File(filePath);
    if (file.exists()) {
    FileInputStream fis = new FileInputStream(file);
    byte[] b = new byte[fis.available()];
    fis.read(b);
    result = new String(b, "UTF-8");
    fis.close();
    }
    return result;
    }



    //修改后存储
    public static void saveFile(String content, String path, String fileName)
    throws IOException {
    File f = new File(path);
    if (!f.exists()) {
    f.mkdirs();
    }
    File fn = new File(f, fileName);
    FileOutputStream fos = new FileOutputStream(fn);
    fos.write(content.getBytes());
    fos.close();
    }


    //删除旧文件
    public static void deleteFile(String path) throws IOException {
    File f = new File(path);
    if (f.exists()) {
    f.delete();
    } else {
    throw new IOException("未找到相关文件");
    }
    }


    //执行方法
    public static boolean writeProperties(String filePath,
    String parameterName, String parameterValue) {
    boolean flag = false;
    try {

    //取得文件所有内容
    String all = CreatePro.readFile(filePath, parameterName);
    String result = null;

    //如果配置文件里存在parameterName
    if (all.indexOf(parameterName) != -1) {

    //得到parameterName前的字节数
    int a=all.indexOf(parameterName);

    //取得以前parameterName的值
    String old = readProperties(filePath, parameterName);

    //得到parameterName值前的字节数
    int b=a+(parameterName.length()+"=".length());

    //新的properties文件所有内容为:旧的properties文件中内容parameterName+"="+新的parameterName值(parameterValue)+旧的properties文件中parameterName值之后的内容
    result=all.substring(0,a)+parameterName+"="+parameterValue+all.substring(b+ToUnicode.convert(old).length(),all.length());
    }


    //删除以前的properties文件
    CreatePro.deleteFile(filePath);


    //存储新文件到以前位置
    String[] arrPath = filePath.split("WEB-INF");
    String path = arrPath[0]+"WEB-INF\\configs";
    CreatePro.saveFile(result, path, "xf.properties");
    flag=true;
    } catch (IOException e) {
    e.printStackTrace();
    flag=false;
    }
    return flag;
    }


    //Properties方法写properties文件
    /*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 \n");
    falg = true;
    }catch (IOException e) {
    e.printStackTrace();
    System.err.println("Visit " + filePath + " for updating " + parameterName + " value error");
    falg = false;
    }*/




    //读properties文件,Properties方法
    public static String readProperties(String filePath, String parameterName) {
    String value = "";
    Properties prop = new Properties();
    try {
    InputStream fis = new FileInputStream(filePath);
    prop.load(fis);
    value = prop.getProperty(parameterName);
    } catch (IOException e) {
    e.printStackTrace();
    }
    return value;
    }
    }

    历史上的今天:


    收藏到:Del.icio.us