下面我们就看一种最简单的文件读取吧。
下面的文件内容保存在我本地的F:\Work\properties中。
jdbc.driverClassName=oracle.jdbc.driver.OracleDriver jdbc.url=jdbc:oracle:thin:@127.0.0.1:1521:oracle jdbc.username=test jdbc.password=test
import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.util.Properties; public class UtilProperties { public static void main(String[] args) { File file = new File("F:\\Work\\properties\\db.properties"); FileInputStream fi = null; try { fi = new FileInputStream(file); } catch (FileNotFoundException e) { e.printStackTrace(); } Properties p = new Properties(); try { p.load(fi); } catch (IOException e) { e.printStackTrace(); } p.list(System.out); } }
运行结果输出如下。(此方法一般用于调试)
-- listing properties -- jdbc.url=jdbc:oracle:thin:@127.0.0.1:1521:oracle jdbc.username=test jdbc.password=test jdbc.driverClassName=oracle.jdbc.driver.OracleDriver
下面这种方式的输出才是我们需要用到的,
import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.util.Enumeration; import java.util.Properties; public class UtilProperties { public static void main(String[] args) { File file = new File("F:\\Work\\properties\\db.properties"); FileInputStream fi = null; try { fi = new FileInputStream(file); } catch (FileNotFoundException e) { e.printStackTrace(); } Properties p = new Properties(); try { p.load(fi); } catch (IOException e) { e.printStackTrace(); } Enumeration e = p.propertyNames(); while(e.hasMoreElements()) { Object obj = e.nextElement(); System.out.println(obj+"="+p.getProperty((String) obj)); } } }
结果如下:
jdbc.url=jdbc:oracle:thin:@127.0.0.1:1521:oracle jdbc.username=test jdbc.password=test jdbc.driverClassName=oracle.jdbc.driver.OracleDriver
虽然你发现输出反而少了一行,但是你可以看下我们的输出代码的写法,如果我们不用去输出,而是把他set进入一个对象的属性中去,那我们岂不是能够通过此方法,获得文件的记录,然后入库或者都可以了,是不是很简单,但是你会发现,我们这样做仅仅不够,很多人就会问了,这个类就只有这一个作用吗?别着急,下面我们就开始进入另一个相对比较常见的方式, xml文件解析。
xml文件这次我们保存在我们的项目路径下D:\Workspace\TESTFOROJ
文件的内容如下:
jdbc:oracle:thin:@127.0.0.1:1521:oracle test test oracle.jdbc.driver.OracleDriver
我们需要解析的代码就变成如下代码了:
import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.util.Enumeration; import java.util.InvalidPropertiesFormatException; import java.util.Properties; public class UtilProperties { public static void main(String[] args) { File file = new File("D:\\Workspace\\TESTFOROJ\\db.xml"); FileInputStream fi = null; try { fi = new FileInputStream(file); } catch (FileNotFoundException e) { e.printStackTrace(); } Properties p = new Properties(); try { p.loadFromXML(fi); } catch (InvalidPropertiesFormatException e1) { e1.printStackTrace(); } catch (IOException e1) { e1.printStackTrace(); } @SuppressWarnings("unchecked") Enumeration输出结果如下:
jdbc.url=jdbc:oracle:thin:@127.0.0.1:1521:oracle jdbc.username=test jdbc.password=test jdbc.driverClassName=oracle.jdbc.driver.OracleDriver
以上是举例我们如何进行xml文件的读取, 其实我们还可以做到 xml文件的保存。
我们还是以上个文件为例,代码如下
import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.PrintStream; import java.util.Enumeration; import java.util.InvalidPropertiesFormatException; import java.util.Properties; public class UtilProperties { private static void getXML(Properties p,String fileName) { File file = new File(fileName); FileInputStream fi = null; try { fi = new FileInputStream(file); } catch (FileNotFoundException e) { e.printStackTrace(); } try { p.loadFromXML(fi); } catch (InvalidPropertiesFormatException e1) { e1.printStackTrace(); } catch (IOException e1) { e1.printStackTrace(); } @SuppressWarnings("unchecked") Enumeratione = (Enumeration ) p.propertyNames(); while (e.hasMoreElements()) { Object obj = e.nextElement(); System.out.println(obj + "=" + p.getProperty((String) obj)); } } public static void main(String[] args) { Properties p = new Properties(); //读取文件 getXML(p,"D:\\Workspace\\TESTFOROJ\\db.xml"); //改变我们读进来的属性,然后输出到另一个xml文件中去 p.setProperty("jdbc.username", "OOOOOOXXXXXXXX"); PrintStream ps = null; String fileName = "D:\\Workspace\\TESTFOROJ\\db_bak.xml"; try { ps = new PrintStream(new File(fileName)); } catch (FileNotFoundException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } try { p.storeToXML(ps, "this is print xml,just for test"); } catch (IOException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } //看下改变之后的文件内容 getXML(p,fileName); } }
下面是我们的输出结果:
jdbc.url=jdbc:oracle:thin:@127.0.0.1:1521:oracle jdbc.username=test jdbc.password=test jdbc.driverClassName=oracle.jdbc.driver.OracleDriver jdbc.url=jdbc:oracle:thin:@127.0.0.1:1521:oracle jdbc.username=OOOOOOXXXXXXXX jdbc.password=test jdbc.driverClassName=oracle.jdbc.driver.OracleDriver
注意,此类还有很多我没有涉及到的,一些高级的属性,后续会慢慢研究,此文章只为备忘,如果有朋友看到了,有觉得不对的地方,请尽管提出来。注意,代码中有一些后续工作没有处理,比如流的关闭,我是没有做的,希望大家要注意哦。
以下是load方法的解释。
Open Declaration void java.util.Properties.load(InputStream inStream) throws IOException Reads a property list (key and element pairs) from the input byte stream. The input stream is in a simple line-oriented format as specified in load(Reader) and is assumed to use the ISO 8859-1 character encoding; that is each byte is one Latin1 character. Characters not in Latin1, and certain special characters, are represented in keys and elements using Unicode escapes. The specified stream remains open after this method returns