IO资源的处理
之前的⼊⻔练习,我们⼀直把异常抛出,⽽实际开发中并不能 这样处理,建议使⽤try...catch...finally 代码块,处理异常部分
public class haunchongliu {
public static void main(String[] args) {
//IO资源的处理
//练习:拷贝文件
//jdk前IO异常处理
FileInputStream fis=null;
FileOutputStream fos= null;
try {
// 1.创建字节输⼊流对象,关联数据源⽂件路径
fis =new FileInputStream("C:\\Users\\25120\\IdeaProjects\\java\\2.txt");
// 2.创建字节输出流对象,关联⽬的地⽂件路径
fos = new FileOutputStream("C:\\Users\\25120\\IdeaProjects\\java\\3.txt");
// 3.定义⼀个字节数组,⽤来存储读取到的字节数据
byte[] bys = new byte[8192];
//3.定义一个int 类型变量,用来存储
int len;
while ((len=fis.read(bys))!=-1) {
fos.write(bys, 0, len);
}
}catch (IOException e) {
e.printStackTrace();
}finally {
//关闭流,释放资源
try {
if (fos != null) {
fos.close();
}
}catch (IOException e) {
e.printStackTrace();
}finally {
try {
if (fis!=null){
fis.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
JDK7的处理
讲解:还可以使⽤JDK7优化后的try-with-resource 语句,该语句 确保了每个资源在语句结束时关闭。所谓的资源 (resource)是指在程序完成后,必须关闭的对象。
格式:
try ( 创建流对象语句,如果多个 , 使⽤ ';' 隔开 ) {// 读写数据} catch ( IOException e ) {e . printStackTrace ();}
代码:
public class JDK7 {
public static void main(String[] args) {
try (FileWriter fw = new FileWriter("C:\\Users\\25120\\IdeaProjects\\java\\2.txt",true);){
//写出数据
fw.write("xiaowang");
}catch (IOException e) {
e.printStackTrace();
}
}
}
属性集--Properties
Properties类概述:
java.util.Properties
继承于
Hashtable
,来表示⼀个持久的属性集。它使⽤键值结构存储数据,每个键及其对应值都是⼀个字符串。该类也被许多Java
类使⽤,⽐如获取系统属性时,System.getProperties
⽅法就是返回⼀个Properties
对象
Properties类构造方法:
- public Properties() :创建⼀个空的属性列表。
Properties
类存储⽅法
-
public Object setProperty(String key, String value) : 保存⼀对属性。
-
public String getProperty(String key) :使⽤此属性列表中指定的键搜索属性值。
-
public Set<String> stringPropertyNames() :所有键的名称的集合。
public class shuxingji {
//Properties类
public static void main(String[] args) {
//创建属性集对象
Properties properties = new Properties();
//添加键值对元素
properties.setProperty("name","2.txt");
properties.setProperty("age","18");
properties.setProperty("length","123456");
//打印属性集对象
System.out.println(properties);
//通过键,获取属性值
System.out.println(properties.getProperty("name"));
System.out.println(properties.getProperty("length"));
System.out.println(properties.getProperty("age"));
//遍历属性集,获取所有键的集合
Set<String> Strings = properties.stringPropertyNames();
//打印键值对
for (String key: Strings) {
System.out.println(key+"="+properties.getProperty(key)
);
}
}
}
Propertier类与流相关的方法
-
public void load(InputStream inStream) : 从字节输⼊流中读取键值对
-
public void load(Reader reader) : 从字节输⼊流中读取键值对
参数中使⽤了字节输⼊流,通过流对象,可以关联到某⽂件上,这样就能够加载⽂本中的数据了。
public class Test04 {
public static void main(String[] args) throws IOException {
//Properties类
//创建properties对象
Properties pro =new Properties();
//往 pro对象中添加键值对
pro.setProperty("name","张三");
pro.setProperty("age","20");
//把pro对象的键值对写入到文件中
FileOutputStream fos =new FileOutputStream("C:\\Users\\25120\\IdeaProjects\\java\\01.properties");
pro.store(fos,"sunlw");
//关闭流
fos.close();
method01();
}
//加载(读取)配置文件中的数据 常见
private static void method01()throws IOException {
// 1.加载(读取)配置⽂件中的数据
// 创建Properties对象
Properties pro = new Properties();
//调用load方法加载配置文件中的数据
FileInputStream fis = new FileInputStream("C:\\Users\\25120\\IdeaProjects\\java\\01.properties");
pro.load(fis);//把关联文件中的数据以键值对的形式存储到pro对象中
//关闭流,释放资源
fis.close();
//打印pro对象
System.out.println(pro);
System.out.println("------------------------------");
// 注意事项: 如果配置⽂件中有中⽂
// 创建Properties对象
Properties pro2 = new Properties();
//调用load方法加载配置文件中的数据
FileReader fr = new FileReader("C:\\Users\\25120\\IdeaProjects\\java\\2.txt");
pro2.load(fr);// 把关联⽂件中的数据以键值对的形式存储到pro对象中
fr.close();
System.out.println(pro2);
}
}