Java——IO总结2

 

1.字符流

 

1.1InputStreamReader

/**

 * InputStreamReader 是读取字符类

 * 读取文件以字符为单位,底层还是字节流

 * */

 

package day23.reader;

 

import java.io.FileInputStream;

import java.io.FileNotFoundException;

扫描二维码关注公众号,回复: 3198866 查看本文章

import java.io.IOException;

import java.io.InputStreamReader;

 

public class InputStreamReaderDemo {

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

//创建一个字符流对象

//1.1创建字节流对象,关联到要操作的文件

FileInputStream in=new FileInputStream("C:\\Users\\Administrator\\Desktop\\Java1807\\day01\\FirstDemo.java");

//1.2创建字符流对象,关联字节流

InputStreamReader reader=new InputStreamReader(in);

//2.读取字符

/*//读取单个字符

System.out.println(reader.read());

//读取一串字符,把字符存在字符数组中

char []cbuf=new char[10];

int len=reader.read(cbuf);

System.out.println(len);

//从流中读取一定长度的字符,存到缓存区,从某个位置开始,读取长度

//reader.read(cbuf, offset, length);*/

//初始化一个缓存区

char[]cbuf=new char[10];

//设置长度

int len=0;

//循环读取数据

while ((len=reader.read(cbuf))!=-1) {

//处理接受的数据

System.out.print(new String(cbuf,0,len));

}

//3.关闭流

in.close();

reader.close();

}

}

输出结果:

 

1.2OutoutStreamWriter

 

package day23.writer;

 

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.OutputStreamWriter;

 

public class OutputStreamWriterDemo {

//写出字节流

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

// 初始化一个字符流对象

OutputStreamWriter writer=new OutputStreamWriter(new FileOutputStream("C:\\Users\\Administrator\\Desktop\\111.txt",true));

//写操作

//写单个字符

writer.write("q");

//写入一个字符数组

char[]cbuf={'s','d','c','a','l','m'};

writer.write(cbuf);

//3.刷入数组,从那个位置开始到哪个位置结束

writer.write(cbuf, 1, 4);

//写入一个字符串

writer.write("Hello");

//刷入

writer.flush();

//关闭

writer.close();

}

}

输出结果:

1.3FileReader

/**

 * FileReader是InputStreamReader的子类

 * 只能使用平台默认的编码格式

 * */

 

package day23.reader;

 

import java.io.FileReader;

import java.io.IOException;

 

public class FileReaderDemo {

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

//创建FileReader对象

FileReader reader=new FileReader("C:\\Users\\Administrator\\Desktop\\111.txt");

//读取字符

//声明一个缓冲区

char[]cbuf=new char[10];

int len=0;

//循环读取字符

while ((len=reader.read(cbuf))!=-1) {

//处理字符

System.out.print(new String(cbuf,0,len));

}

//关闭

reader.close();

}

}

输出结果:

1.4FileWriter

 

package day23.writer;

 

import java.io.FileWriter;

import java.io.IOException;

 

//FileWriter是OutputStreamWriter的子类

public class FileWriterDemo {

 

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

// 初始化一个FileWriter对象

FileWriter writer=new FileWriter("C:\\Users\\Administrator\\Desktop\\123.txt",false);

//写操作

writer.write("This is  a FileWriter!");

//刷入

writer.flush();

//关闭

writer.close();

}

}

输出结果:

1.5BufferedReader

/**

 * BufferedReader是Reader的子类

 * 最大特点就是每次可以读取到一行,一行的定义就是读取到换行符

 * */

 

package day23.reader;

 

import java.io.BufferedReader;

import java.io.FileNotFoundException;

import java.io.FileReader;

import java.io.IOException;

import java.io.InputStreamReader;

 

public class BuferedReaderDemo {

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

//初始化一个对象

//使用手动设置编码格式

//InputStreamReader input=new InputStreamReader(in, dec);

//使用默认的编码个打

FileReader reader=new FileReader("C:\\Users\\Administrator\\Desktop\\Java1807\\day01\\FirstDemo.java");

BufferedReader br=new BufferedReader(reader);

//读取数据

/*//读取单个字符

System.out.println(br.read());

//读取多个字符

char[]cbuf=new char[5];

System.out.println(br.read(cbuf));*/

//读取行

String str=null;

while (br.ready()) {

str=br.readLine();

System.out.println(str);

}

//关闭流

br.close();

reader.close();

}

}

输出结果:

1.6BufferedWriter

/**

 * BufferedWriter是Writer的子类

 * 可以写入一行数据,可以换行

 * */

 

package day23.writer;

 

import java.io.BufferedWriter;

import java.io.FileWriter;

import java.io.IOException;

import java.io.OutputStreamWriter;

 

import javax.swing.text.AbstractDocument.BranchElement;

 

public class BufferedWriterDemo {

 

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

// 创建BufferedWriter对象

//创建一个Writer子类对象

//可以设置编码集

//OutputStreamWriter osw=new OutputStreamWriter(out, enc);

//默认编码集

FileWriter writer=new FileWriter("C:\\Users\\Administrator\\Desktop\\222.txt",true);

BufferedWriter bw=new BufferedWriter(writer);

//写数据

String str="哎呦,不错哦!";

bw.write(str);

//换行

bw.newLine();

//刷入

bw.flush();

//关闭流

writer.close();

bw.close();

}

 

}

输出结果:

2.二进制I/O流

2.1DataInputStream

/**

 * DataInputStream

 * 二进制输入流,可以读取文件,将文件中对应的数据类型还原成java的基本数据类型

 * */

 

package day24.io;

 

import java.io.DataInputStream;

import java.io.FileInputStream;

import java.io.IOException;

 

public class DataInputStreamDemo {

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

//初始化对象

DataInputStream input=new DataInputStream(new FileInputStream("C:\\Users\\Administrator\\Desktop\\Java1807\\data.txt"));

//读取数据,必须按照存入的顺序来读取

System.out.println(input.readBoolean());

System.out.println(input.readByte());

System.out.println(input.readChar());

System.out.println(input.readDouble());

System.out.println(input.readFloat());

System.out.println(input.readLong());

System.out.println(input.readInt());

System.out.println(input.readShort());

System.out.println(input.readUTF());

//关闭流

input.close();

}

}

输出结果:

2.2DataOutputStreamD

/**

 * DataOutputStream

 * 二进制输出流,可以将java的基本类型直接写到文件中

 * */

 

package day24.io;

 

import java.io.DataOutputStream;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.IOException;

 

public class DataOutputStreamDemo {

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

//初始化对象

DataOutputStream out=new DataOutputStream(new FileOutputStream("C:\\Users\\Administrator\\Desktop\\Java1807\\data.txt"));

//写数据

out.writeBoolean(true);//写入一个boolean值类型

out.writeByte(3);//写入一个字节类型

out.writeChar('q');

out.writeDouble(1.1);

out.writeFloat(3.14F);

out.writeLong(333L);

out.writeInt(12);

out.writeShort(2209);

out.writeUTF("asda");

//强制刷入

out.flush();

//关闭流

out.close();

}

}

 

输出结果:

3.打印输出流

3.1PrintStream

/**

 * PrintStream 打印输出流

 * 可以输出字节流,可以向不同的流中输出数据,自带换行符

 * 如果输入烦人是字符,使用PrintWriter,带编码格式

 * */

 

package day24.io;

 

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.PrintStream;

 

public class PrintStreamDemo {

 

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

// 初始化对象

PrintStream st=new PrintStream(new FileOutputStream("C:\\Users\\Administrator\\Desktop\\Java1807\\p1.txt"),false);

//写入数据

//不带换行

st.print(true);

st.print(111);

st.print(12.3F);

st.print("qq1");

//自带换行功能

st.println(false);

st.println("nihao");

st.println("Hello");

st.println(123);

//关闭

st.close();

}

}

输出结果:

3.2PrintWriter

 

package day24.io;

 

import java.io.FileNotFoundException;

import java.io.PrintWriter;

 

public class PrintWriterDemo {

 

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

// 初始化对象

PrintWriter writer=new PrintWriter("C:\\Users\\Administrator\\Desktop\\Java1807\\p2.txt");

//写数据

writer.print(true);

writer.print("qq");

writer.print(123);

writer.print(111.1);

//带换行

writer.println("Hello");

writer.println(false);

writer.println(12.45F);

writer.println('f');

//强制刷入

writer.flush();

//关闭流

writer.close();

}

}

输出结果:

4.序列化和反序列化操作

4.1Serializable

 

package day24.io;

 

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.ObjectInputStream;

import java.io.ObjectOutputStream;

import java.io.Serializable;

 

//如果该类要支持序列化技术,必须实现接口 Sreializable

@SuppressWarnings("serial")

class Student implements Serializable{

String name;

int age;

}

public class SerializableDemo {

//序列化:对象通过编码技术转换成二进制数据存储起来

public static void writeObj() throws FileNotFoundException, IOException {

//初始化对象

ObjectOutputStream out=new ObjectOutputStream(new FileOutputStream("C:\\Users\\Administrator\\Desktop\\Java1807\\Student1.txt"));

out.writeChar('C');

out.writeBoolean(true);

Student stu=new Student();

stu.name="qq";

stu.age=21;

out.writeObject(stu);

//强制刷入

out.flush();

//关闭流

out.close();

}

//反序列化:将二进制数据通过解码技术,构建还原成原来的对象

public static void readObj() throws FileNotFoundException, IOException, ClassNotFoundException {

ObjectInputStream in=new ObjectInputStream(new FileInputStream("C:\\Users\\Administrator\\Desktop\\Java1807\\Student1.txt"));

//读取数据

System.out.println(in.readChar());

System.out.println(in.readBoolean());

Student stu=(Student)in.readObject();

System.out.println(stu.name+"  "+stu.age);

//关闭流

in.close();

}

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

writeObj();

readObj();

}

}

输出结果:

4.2练习题

 

package day23.test1;

 

import java.io.FileInputStream;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.ObjectInputStream;

import java.io.ObjectOutputStream;

import java.io.Serializable;

import java.util.ArrayList;

 

//创建学生类

@SuppressWarnings("serial")

class Student implements Serializable{

//属性

private int sId;

private String name;

private int age;

 

public int getsId() {

return sId;

}

public void setsId(int sId) {

this.sId = sId;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public int getAge() {

return age;

}

public void setAge(int age) {

this.age = age;

}

//构造方法

public Student() {

// TODO 自动生成的构造函数存根

}

public  Student(int sId,String name,int age) {

this.sId=sId;

this.name=name;

this.age=age;

}

@Override

public String toString() {

System.out.println("sId:"+this.sId+"\tname:"+this.name+"\tage:"+this.age);

return super.toString();

}

}

public class StudentSerializable {

//序列化操作

public static void serializeOperation(ArrayList<Student>list) throws IOException {

//初始化对象,关联字节输出流

FileOutputStream out=new FileOutputStream("C:\\Users\\Administrator\\Desktop\\Java1807\\Student.txt");

ObjectOutputStream oos=new ObjectOutputStream(out);

//序列化对象

oos.writeObject(list);

//强制刷入

oos.flush();

//关闭流

oos.close();

out.close();

}

//反序列化操作

@SuppressWarnings("unchecked")

public static void antiSerializationOperation() throws IOException, ClassNotFoundException {

//初始化对象,关联输入流

FileInputStream in=new FileInputStream("C:\\Users\\Administrator\\Desktop\\Java1807\\Student.txt");

ObjectInputStream ois=new ObjectInputStream(in);

//反序列化

ArrayList<Student>list=(ArrayList<Student>)ois.readObject();

//输出

for (Student student : list) {

student.toString();

}

//关闭流

ois.close();

in.close();

}

 

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

//初始化ArrayList对象

ArrayList<Student>list=new ArrayList<Student>();

//添加数据

list.add(new Student(1,"一叶知秋",21));

list.add(new Student(2,"浪子一秋",21));

list.add(new Student(3,"葬剑山庄",21));

list.add(new Student(4,"剑侠情缘",21));

list.add(new Student(5,"葬剑灬尊",21));

//序列化

serializeOperation(list);

//反序列化

antiSerializationOperation();

}

}

输出结果:

5.知识框架

 

猜你喜欢

转载自blog.csdn.net/qq_41534115/article/details/81747982