I/O流任务
Posted 78tian
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了I/O流任务相关的知识,希望对你有一定的参考价值。
一、完成以下链接[https://www.cnblogs.com/zhrb/p/6834084.html]中的任务3、4、5。
3. 字符编码
主要讲解中文乱码问题,FileReader、InputStreamReader。
FileReader是InputStreamReader 类的子类,FileReader读取文件的过程中,FileReader继承了InputStreamReader,但并没有实现父类中带字符集參数的构造函数,所以FileReader仅仅能按系统默认的字符集来解码,然后在UTF-8 -> GBK-> UTF-8的过程中编码出现损失,造成结果不能还原最初的字符;InputStreamReader读的是字节数组byte [ ],而FileReader读的是字符数组char [ ];
4. 字节流、二进制文件:DataInputStream, DataOutputStream、ObjectInputStream
//DataInputStream(二进制输入流)
public class DataInputStreamDemo { // 二进制流(读操作)
public static void main(String[] args) {
FileInputStream fis = null;
DataInputStream dis = null;
try {
fis = new FileInputStream("cba.bin");
dis = new DataInputStream(fis);
System.out.println(dis.readUTF()); // 读取字符串
System.out.println(dis.readInt()); // 读取整型
System.out.println(dis.readBoolean()); // 读取bool类型
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
dis.close();
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
//DataOutputStream二进制输出流
public class DataOutputStreamDemo {
public static void main(String[] args) {
FileOutputStream fos = null;
DataOutputStream dos = null;
try {
fos = new FileOutputStream("cba.bin");// 创建字节流
dos = new DataOutputStream(fos);// 创建二进制流
dos.writeUTF("abc");// 将utf-8编码字符串写入到流中
dos.writeInt(100);
dos.writeBoolean(true);
System.out.println("写入成功!");
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
dos.close();// 关闭流
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
//对象的输入流: ObjectInputStream,把文件中的对象信息读取出来
public static void readObject(File f) throws IOException, ClassNotFoundException
{
FileInputStream inputStream = new FileInputStream(f);//创建文件字节输出流对象
ObjectInputStream objectInputStream = new ObjectInputStream(inputStream);
User user = (User)objectInputStream.readObject();
System.out.println(user);
}
5. 选做:RandomAccessFile
- RandomAccessFile是用来访问那些保存数据记录的文件的,可以用seek( )方法来访问记录,并进行读写;
二、缓冲流(请自己设计实验进行测试)。尝试使用junit进行测试。
[http://www.maiziedu.com/wiki/java/buffered/]
三、尝试结合DAO模式与本章所学内容,为购物车系统设计数据存储相关的StudentDao接口及其相关实现类。
- 还未实现。
以上是关于I/O流任务的主要内容,如果未能解决你的问题,请参考以下文章