开始时间:2018年8月27日21:00:38
结束时间:2018年8月27日21:51:59
累计时间:课上三小时+今天晚上一小时=四小时
一: Properties集合:
属性表集合: 特点: key value String类型: 能够和IO流结合使用:
store()
load();
storeToXml();
loadFromXml();
文件的介绍:
.properties :属性表文件:
特点:(1) 存放都是key = value ; 存放的内容都是键值对:
(2)文件当中不能保存中文:
(3) 通常情况用来做配置文件:
传统的方式:
native2ascii inputFile outFile
xml文件: extensible markup Language 可扩展的标记语言: 和html 同根同源。
webservice
(1)用来数据的储存: 配置文件使用
(2)不同系统之间数据的传输:
类的加载器获得资源流: 获得类路径下的资源: src ---->classes getResourceAsStream("path");相对于类路径
通过类获得资源流: Class getResourceAsStream("path");//相对于当前文件的路径:
二: 集合的工具类:
Collections: 工具类: 方法都是静态的,构造器私有的。
|----max(Collection c); 根据自然顺序求最值:
|--- max(Collection c, Comparator comp); 根据自定义的比较规则 求最值:
|----min(Collection<? extends T> coll)
|--- sort(List list); list集合才保证顺序。 默认自然顺序排序:
|--- sort(List list, Comparator com);自定义比较规则 进行排序
|----reverse((List list); 元素的反转
|----synchronizedList(List<T> list) ; 将线程异步的List 转换成线程同步的list。
|----synchronizedXxx(); 异步转换成同步:
ArrayList 集合: 异步,数据不安全。
注意: 以后要对集合当中的元素进行相关操作的时候, 首先过来从Collections当中查找相应的方法。
没有需要使用的方法,然后自定义。
三: Properties集合:
(1)存放的key 和 value 都是String类型,作为集合的属性: 所以集合称之属性表集合:
(2)构造器:
new Properties(); 创建一个空的属性表集合:
API方法:
存放: setProperty(key , value);
getProperty(key); 返回String 类型:
stringPropertyNames(); 获得key的集合 Set集合: 1.6
propertyNames() //使用枚举遍历属性表集合: 1.0
四: 属性表集合和外部的文件进行通信: (IO流)
store(Writer writer, String comments) ;
store(OutputStream out ,String comments);
storeToXml(OutputStream out,String comments); //将数据写到xml文件当中,必须使用字节输出流:
load(Reader r);
load(InputStream in);
loadFromXml(InputStream in);
list(PrintStream ps);
五: 使用 类的加载器读取文件:
类的加载器只能获得类路径下的资源: 类路径: classes 目录就称之为类路径。
(0)获得Class实例:
Class 类型: 加载到Jvm当中字节码对象的类型:
获得方式:
a: 文件名称.class
b: 对象.getClass();
c: Class.forName("全路径名称");
(1)获得类的加载器:getClassLoader() 获得一个类的加载器:
类的加载器: 系统类的加载器, (应用类的加载器),.. . 三种加载器:
(2)调用方法: getResourceAsStream(); 返回的是InputStream
总结:
this.getClass().getClassLoader().getResourceAsStream();
六: 补充: 使用Class 获得资源流:
(1)获得 Class : 方式三:
(2)获得 getResourceAsStream(String name) ; 返回一个InputStream;
class 获得资源流: 相对路径: 相对于当前文件的存放位置:
实例:将属性表集合当中的数据写出到外部的文件
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintStream;
import java.util.Properties;
public class PropertiesDemo2 {
public static void main(String[] args) throws IOException {
/*
* 演示属性表集合的存取方法:
*/
Properties p = new Properties();
//存放在属性表集合: 内存当中:
p.setProperty("url", "jdbc:mysql:http://localost:3306/test");
p.setProperty("driver", "com.mysql.jdbc.Driver");
p.setProperty("username", "root");
p.setProperty("password", "root");
//调用方法:
// write2File(p);
// write2File02(p);
// String fileName = "C:/Users/Mrzhang/javaEE/javaSE-07/javaSE-43/db1.properties";
String fileName = "C:/Users/Mrzhang/javaEE/javaSE-07/javaSE-43/dbXml1.xml";
String comments = "这是数据库的配置参数信息";
write2File(p,fileName, comments);
//演示list(PrintStream out) ;
p.list(new PrintStream(new File("C:/Users/Mrzhang/javaEE/javaSE-07/javaSE-43/dbXml2.xml")));
}
//定义功能: 将属性表集合当中的数据写出到外部的文件当中: .properties
/* public static void write2File(Properties p) throws IOException{
//调用方法:
p.store(new FileWriter(new File("C:/Users/Mrzhang/javaEE/javaSE-07/javaSE-43/db.properties")), "这是一个数据库的配置文件的信息");
}
//定义功能: 将属性表集合当中的数据写出到外部的文件当中: .properties
public static void write2File02(Properties p) throws IOException{
p.storeToXML(new FileOutputStream(new File("C:/Users/Mrzhang/javaEE/javaSE-07/javaSE-43/dbXml.xml")), "这是xml文件保存数据信息");
}*/
public static void write2File(Properties p,String fileName,String comments) throws IOException{
if(p==null){
throw new RuntimeException("传入的集合不能为null");
}
if(fileName == null || fileName.trim().length()==0 || fileName.trim()=="" ){
throw new RuntimeException("传入的文件名称不能为空");
}
if(fileName.endsWith(".properties")){
p.store(new FileWriter(new File(fileName)), comments);
}else if(fileName.endsWith(".xml")){
p.storeToXML(new FileOutputStream(new File(fileName)), comments);
}else{
throw new RuntimeException("您出入的文件格式不正确,请重新输入");
}
}
}
从外部的文件当中读取数据 到内存当中:
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Enumeration;
import java.util.Properties;
import java.util.Set;
public class PropertiesDemo03 {
public static void main(String[] args) throws FileNotFoundException, IOException {
/*
* 演示: 从外部的文件当中读取数据 到内存当中:
*/
//通过外部文件:并且将其设置到p集合当中, 通过key 获得对应的value。
/* Properties p = new Properties();
//将流当中的数据加载到集合当中:
p.load(new FileReader("C:/Users/Mrzhang/javaEE/javaSE-07/javaSE-43/db1.properties"));
//System.out.println(p);
Set<String> keys = p.stringPropertyNames();
for(String key: keys){
String value = p.getProperty(key);
System.out.println(key+":"+value);
}*/
//调用readFile方法: 将外部的数据读取到p集合当中:
Properties p = new Properties();
// String fileName = "C:/Users/Mrzhang/javaEE/javaSE-07/javaSE-43/db1.properties";
String fileName = "C:/Users/Mrzhang/javaEE/javaSE-07/javaSE-43/dbXml1.xml";
Properties p1 = readFile(p,fileName);
System.out.println(p1);
}
//定义一个功能: 读取外部文件的数据:
public static Properties readFile(Properties p , String fileName)throws IOException{
if(p==null){
throw new RuntimeException("传入的集合不能为null");
}
if(fileName == null || fileName.trim().length()==0 || fileName.trim()=="" ){
throw new RuntimeException("传入的文件名称不能为空");
}
if(fileName.endsWith(".properties")){
p.load(new FileReader(new File(fileName)));
return p;
}else if(fileName.endsWith(".xml")){
p.loadFromXML(new FileInputStream(new File(fileName)));
return p;
}else{
throw new RuntimeException("您出入的文件格式不正确,请重新输入");
}
}
}
使用类的加载器获得文件当中的数据:
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
public class ReadFileDemo01 {
public static void main(String[] args) throws ClassNotFoundException, IOException {
/*
* 使用类的加载器获得文件当中的数据:
*/
//1:方式一: 获得Class实例: 字节码对象类型:
Class c = ReadFileDemo01.class;
//方式二:
Class c1= new ReadFileDemo01().getClass(); //获得Class
//方式三:
Class clazz = Class.forName("com.yidongxueyuan.properties.ReadFileDemo01");//全路径名称: 包名.类型
//2: 使用Class 当中的APi方法:获得类的加载器:
ClassLoader loader = clazz.getClassLoader();
//3: 使用类的加载器的方法:
InputStream in = loader.getResourceAsStream("a.txt");// a.txt 在src下存放: 相对于类路径:
//4:读取文件当中的数据:
int len = 0 ;
byte buf []= new byte[1024];
while((len = in.read(buf))!=-1){
System.out.println(new String(buf, 0, len ));
}
/*//4:使用Properties 集合:
Properties p = new Properties();
//流当中的数据: 封装到p集合当中:
p.load(in);
System.out.println(p);*/
}
}
使用Class 获得资源流:
import java.io.IOException;
import java.io.InputStream;
import org.apache.commons.io.IOUtils;
public class ReadFileDemo02 {
/*
* 使用Class 获得资源流:
*/
public static void main(String[] args) throws ClassNotFoundException, IOException {
// Class c = ReadFileDemo02.class;
Class c = Class.forName("com.yidongxueyuan.properties.ReadFileDemo02");
InputStream in = c.getResourceAsStream("b.txt");// b.txt 相对于当前文件存放的位置: com.yidongxueyuan.properties
System.out.println(in);
//使用jar包:
String string = IOUtils.toString(in);
System.out.println(string);
}
}
2018年8月27日22:12:20于易动
这两天比较贪玩 写的都很详细 和以前比较质量不好
凡是写的不好的自己会在下面说明 以后再补上吧