java--标准输入输出流

//读取键盘录入的数据写到a.txt
//方式一
private static void method() throws IOException {
	//创建输入流对象
	InputStream is = System.in;
	Reader r = new InputStreamReader(is);
	//创建输出流对象
	FileWriter fw = new FileWriter("a.txt");
	
	//读取数据
	byte[] bys = new byte[1024];
	int len;
	while((len = is.read(bys))!=-1)
	{
		fw.write(new String(bys, 0, len));
		fw.flush();
	}
	fw.close();
	is.close();
}

//方式二
private static void method2() throws IOException {
	//创建输入流对象
	InputStream is = System.in;
	Reader r = new InputStreamReader(is);
	//创建输出流对象
	FileWriter fw = new FileWriter("a.txt");
	
	//读取数据
	char[] chs = new char[1024];
	int len;
	while((len = r.read(chs))!=-1)
	{
		fw.write(chs, 0 , len);
		fw.flush();
	}
	fw.close();
	r.close();
}


// 将文件中的数据输出到控制台
	BufferedReader br = new BufferedReader(new FileReader("a.txt"));
	
	//OutputStream os = System.out;
	//Writer w = new OutputStreamWriter(System.out);
	//BufferedWriter bw = new BufferedWriter(w);
	BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
	
	String line;
	while((line = br.readLine())!=null)
	{
		bw.write(line);
		bw.newLine();
	}
	bw.close();
	br.close();

//使用打印流复制文本文件
private static void method3() throws FileNotFoundException, IOException {
	//创建输入流对象
	BufferedReader br = new BufferedReader(new FileReader("a.txt"));
	//创建打印流对象
	PrintWriter pw = new PrintWriter(new FileWriter("b.txt"),true);  // 此处true,是自动刷新
	String line;
	while((line = br.readLine())!=null)
	{
		pw.println(line);
	}
	pw.close();
	br.close();
	}


//使用字节流进行文件的复制(复制二进制文件)

private static void method() throws FileNotFoundException, IOException {
	FileInputStream fis = new FileInputStream("这里是一个文件名");
	FileOutputStream fos = new FileOutputStream("另一个问件名");
	
// 一次读一个字节
//		int by;
//		while((by = fis.read() ) !=-1){
//			fos.write(by);
//		}
	
	// 一次读取一个字符数组
	int len;
	byte[] bys = new byte[1024];
	while((len = fis.read(bys))!=1){
		fos.write(len);
	}
	
	fis.close();
	fos.close();
}

对象操作流

可以用于读写任意类型的对象
ObjectOutputStream :对象输出字符流
WriteObject
ObjectInputStream :对象输入字符流
ReadObject
注意:
使用对象输出流写出对象,只能使用对象输入流来读取对象
只能将支持java.io.Serializable 接口的对象写入流中
Serializable:序列号,是一个标识接口,只起表示作用,没有方法
当一个类的对象需要进行IO流进行读写的时候,这个类必须实现此接口

//eg:创建用于文件读写的学生类对象
public class Student implements Serializable{
	private static final long serialVersionUID = -4114259825335049236L;	 // 固定序列号
	String name;
	int age;
	
	public Student(String name,int age) {
		this.age = age;
		this.name = name;
	}
	@Override
	public String toString() {
		return "Student [name=" + name + ", age=" + age + "]";
	}
	
}




//将学生对象写入文件
private static void method() throws IOException, FileNotFoundException {
	//创建对象输出流的对象
	//FileOutputStream fos = new FileOutputStream("a.txt"); // 字节输出流
	//ObjectOutputStream oos = new ObjectOutputStream(fos);
	ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("a.txt"));
	
	//创建学生对象
	Student s = new Student("zhangsan", 18);
	Student s2 = new Student("lisi",19);
	
	//写出学生对象
	oos.writeObject(s);
	oos.writeObject(s2);
	
	//释放资源
	oos.close();
}



//将文件中的学生对象读取出来
	private static void method2() throws IOException, FileNotFoundException, ClassNotFoundException {
		//创建对象输入流的对象
		ObjectInputStream ois = new ObjectInputStream(new FileInputStream("a.txt"));
	/*	//读取对象	
		java.lang.Object obj = ois.readObject();
		System.out.println(obj);
		
		java.lang.Object obj2 = ois.readObject();
		System.out.println(obj2);
		
		java.lang.Object obj3 = ois.readObject();
		System.out.println(obj3);*/
		
		try{
			while(true)
			{
				java.lang.Object obj = ois.readObject();
				System.out.println(obj);
			}
		} catch(EOFException e){
			System.out.println("读到了文件的末尾");
		}
		//释放资源
		ois.close();
	}




// 另一种方式写入
private static void method3() throws IOException, FileNotFoundException {
	// 另一种写入对象文件的方式(将所有对象写入到集合对象中)
	//创建对象输出流对象
	ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("b.txt"));
	//创建集合对象
	ArrayList<Student> list = new ArrayList<Student>();
	//添加学生对象
	list.add(new Student("wangwu", 19));
	list.add(new Student("zhaoliu", 20));
	//写出集合对象
	oos.writeObject(list);
	
	//释放资源
	oos.close();
}


//另一种读取方式
private static void method4() throws IOException, FileNotFoundException, ClassNotFoundException {
	//创建对象输出流对象
	ObjectInputStream ois = new ObjectInputStream(new FileInputStream("b.txt"));
	//读取数据
	java.lang.Object obj = ois.readObject();
	//System.out.println(obj);
	// 向下转型,获取具体的子类对象
	ArrayList<Student> list = (ArrayList<Student>) obj;
	for(Student stu:list)
	{
		System.out.println(stu);
	}
	
	//释放资源
	ois.close();
}
posted @ 2019-06-23 19:34  it-pupil  阅读(1362)  评论(0编辑  收藏  举报