您的位置:首页 > 编程语言 > Java开发

Java基础学习

2013-08-09 13:30 176 查看
1:打印流(掌握)

(1)针对字节和字符数据提供一个打印流的方式。

字节流不需要刷新只是针对基本的字节流.

PrintWriter字符打印流

PrintStream:字节打印流

(2)打印流的特点:

A:可以打印任意类型的数据

B:如果启用了自动刷新,在使用println方法的时候,会自动刷新,并且会自动换行。

C:它可以直接往文件中写入数据

注意:请问哪些流对象可以直接操作文件呢?

观其构造方法,如果同时有File和String的参数。应该是可以的。

(3)为什么要学习打印流?

1) 能够方便打印各种数据值表示形式.

2) 如果启用了自动刷新,在使用println,printf,format等方法的时候会自动刷新.

3) 可以直接操作文件.

(4)打印流步骤:

1) 创建对象

2) 写入数据

3) 释放资源

(5)案例:复制文本文件(掌握)

BufferedReader br = new BufferedReader(new FileReader("a.txt"));

PrintWriter pw = new PrintWriter(new FileWriter("b.txt"),true);

String line = null;

while((line=br.readLine())!=null)

{

pw.println(line);

}

pw.close();

br.close();

2:Properties(理解)

(1)是Map的体系,但是,它可以和IO结合使用。

(2)特殊方法:(理解)

list():把集合中的数据保存到文件中。使用打印流。

load():把文件中的数据加载到集合中,使用任意流。

store():把集合中的数据保存到文件中。使用任意流。

(3)案例:(理解)

查找prop.txt中有没有键为lisi的,如果有,则修改其实为35

代码:

package org.everbuy.properties;

import java.io.FileReader;

import java.io.FileWriter;

import java.io.IOException;

import java.util.Iterator;

import java.util.Properties;

import java.util.Set;

/**

*需求:查找prop.txt中有没有键为lisi的,如果有,则修改其实为35

*分析:

*1) 定义properties对象

*2) 定义源文件

*3) load()将文件内容加载到Properties集合中

*4) 遍历集合,判断lisi是否存在,如果存在将值更改35

*5) 创建目标文件

*6) store()存储到文件中

*7) 释放资源

* */

public class PropertiesTest03 {

/**

* @param args

*/

public static void main(String[] args)throws IOException {

//创建Properties对象

Properties prop = new Properties();

//定义数据源

FileReader fr = new FileReader("Test\\prop.txt");

//prop.load方法将内容加载到集合中

prop.load(fr);

//获取键值

Set<Object> set = prop.keySet();

/*//迭代器方法遍历

* Iterator<Object> it = set.iterator();

//遍历集合

while(it.hasNext()){

Object key = it.next();

//Object value = prop.get(key);

if ("lisi".equals(key)){

prop.setProperty("lisi", "60");

break;

}

}*/

//增强for循环获取元素

for (Object obj:set)

{

if ("lisi".equals(obj)){

prop.setProperty("lisi","40");

break;

}

}

//定义目的地

FileWriter fw = new FileWriter("Test\\prop.txt");

//写入数据

prop.store(fw, "hello");

//释放资源

fw.close();

fr.close();

}

}

3:序列化流(理解)

(1)序列化:把对象按照流的方式操作

反序列化:把流数据还原成对象。

ObjectOutputStream:把对象按照流的方式写入文件

writeObject(Object obj);

ObjectInputStream:把文件中的流元素还原成一个对象

Object readObject();

步骤:

1) 创建对象流对象

2) 写入对象

3) 释放资源

(2)案例:存储的对象必须实现序列化接口。(理解)

存储一个对象

//--------------存储一个对象--------------

//创建对象流对象

ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("Test\\ooss.txt"));

//创建对象

Person p1 = new Person("zhangsan1",21);

//读写数据

oos.writeObject(p1);

//释放资源

oos.close();

//--------------读取文件到对象----------------

//创建对象流对象

ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("Test\\ooss.txt"));

//创建对象

Person p1 = new Person("zhangsan1",21);

//读写数据

oos.writeObject(p1);

//释放资源

oos.close();

存储多个对象。

//创建对象流对象

//---------------存储多个对象到文件中---------------------

ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("Test\\ooss.txt"));

//创建对象

Person p1 = new Person("zhangsan1",21);

Person p2 = new Person("zhangsan2",23);

Person p3 = new Person("zhangsan3",24);

//将多个小对象存储要一个大容器中

ArrayList<Person> al = new ArrayList<Person>();

al.add(p1);

al.add(p2);

al.add(p3);

//读写数据

oos.writeObject(al);

//释放资源

oos.close();

//----------------------从文件中读取到对象流中并打印在控制台--------------------

//创建对象流对象

ObjectInputStream ois = new ObjectInputStream(new FileInputStream("Test\\ooss.txt"));

//读取文件,抛ClassNotFoundException异常

Object obj =ois.readObject();

ArrayList<Person> arr = (ArrayList)obj;

//遍历数组

for(Object o:arr)

{

Person per =(Person)o;

System.out.println(per.getName()+"..."+per.getAge());

}

//释放资源

ois.close();

(3)使用(掌握)

A:以后看到对象实现了序列化接口,就要知道,该对象可以按照流一样的方式被操作。

B:看到对象实现了序列化接口,有黄色警告时,知道怎么解决,并知道这是什么意思。

4:字符编码问题(理解)

(1)编码表:字符和数字的对应关系表。

(2)转换流中的编码问题:(理解)

字符流 = 字节流 + 编码表

OutputStreamWriter(OutputStream out, String charsetName):

(3)字符串中的编码问题:(理解)

编码:

byte[] bys = str.getBytes("GBK");// 指定编码,GBK

解码:

String s = new String(bys, "GBK");
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: