Java中输入输出流2

本文详细介绍了Java中的字符流,包括Writer子类如FileWriter和BufferedWriter的构造方法及常用方法,以及Reader子类如FileReader和BufferedReader的操作。此外,还讲解了如何通过InputStreamReader将字节流转换为字符流,并讨论了序列化和反序列化的过程,涉及Serializable接口和ObjectOutputStream、ObjectInputStream的使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.字符流相关的操作类

        字符输出流---Writer类---抽象类---不能new---子类

1.FileWriter类

        FileWriter类的构造方法

        FileWriter(File file)给一个File对象构造一个FileWriter对象。

        FileWriter(File file,boolean append)给一个File对象构造一个是否追加FileWriter对象

        FileWriter(String FileName)给一个String对象构造一个FileWriter对象

        FileWriter(String fileName,boolean append)给一个String对象构造一个是否追加FileWriter对象

例如:

package com.Test1;

import java.io.File;
import java.io.FileWriter;

public class FileWriterTest {

	public static void main(String[] args) throws Exception{
		//FileWriter构造方法
		//FileWriter(File file)给一个File对象构造一个FileWriter对象。
		File file=new File("E:"+File.separator+"Test2"+File.separator+"test3.txt");
		FileWriter fileout=new FileWriter(file);
		//FileWriter(File file,boolean append)给一个File对象构造一个是否追加FileWriter对象
		FileWriter fileout1=new FileWriter(file,true);
		//FileWriter(String fileName)给一个String对象构造一个FileWriter对象
		String str="E:"+File.separator+"Test2"+File.separator+"test3.txt";
		FileWriter fileout3=new FileWriter(str);
		//FileWriter(String fileName,boolean append)给一个String对象构造一个是否允许追加FileWriter对象。
		FileWriter fileout4=new FileWriter(str,false);
	}

}

FileWriter类是实例方法

        void        write(char[] cbuf)写入一个字符数组

        void        write(char[] cbuf,int off,int len)写入字符数组的一部分

        void        write(int c)写入一个字符

        void        write(String str)写入一个字符串

        void        write(String str,int off,int len)写入字符串的一部分

        void        close()关闭流,先刷新

        void        flush()刷新流

例如:

package com.Test1;

import java.io.File;
import java.io.FileWriter;

public class FileWriterTest2 {

	public static void main(String[] args)throws Exception {
	//FileWriter构造方法---创建一个FileWriter对象
	File file=new File("E:"+File.separator+"Test2"+File.separator+"test3.txt");
	FileWriter fileout=new FileWriter(file);
	String info="hello,world";
	//实例方法
	//void	write(char[] cbuf)写入一个字符数组
	/*char chararray[]=info.toCharArray();
	fileout.write(chararray);
	fileout.flush();
	fileout.close();*/
	
	//void Write(char[] cbuf,int off)写入字符数组的一部分
	/*char chararray[]=info.toCharArray();
	fileout.write(chararray, 0, 5);
	fileout.flush();
	fileout.close();*/
	
	//void write(int c)写一个字符
	/*fileout.write(97);
	fileout.flush();
	fileout.close();*/
	
	//void write()写一个字符串
	/*fileout.write(info);
	fileout.flush();
	fileout.close();*/
	
	//void write(Sring str,int off,int len)写入一个字符串的一部分
	/*fileout.write(info, 0, 5);
	fileout.flush();
	fileout.close();*/
	
	//void close()关闭流,先刷新
	//void	flush()刷新六
	
	char chararray[]=info.toCharArray();
	for(char vla:chararray){
		fileout.write(vla);
	}
	fileout.flush();
	fileout.close();
	}

}

2.BufferedWriter类

BufferedWriter类的构造方法

        BufferedWriter(Writer out)通过字符输出流的对象创建BufferedWriter

BufferedWriter类的实例方法

        void        newLine()写一行行分隔符

        void        write(char[] cbuf,int off,int len)写入一个字符数组的一部分。

        void        write(int c)写入一个字符

        void        write(String s,int off,int len)写入一个字符串的一部分

        void        close()关闭流,先刷新

        void        flush()刷新流

例如:

package com.Test1;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;

public class BufferedWriterTest {

	public static void main(String[] args) throws Exception{
		//BufferedWriter类的构造方法
		//BufferedWriter(Writer out)通过字符输出流的对象创建
		File file=new File("E:"+File.separator+"Test2"+File.separator+"test4.txt");
		FileWriter fileout=new FileWriter(file);
		BufferedWriter fileout2=new BufferedWriter(fileout);
		
		
		//BufferedWriter类的实例方法
		//void write(char[] cbuf,int off,int len)写入字符数组的一部分
		String info="hello,world";
		char chararray[]=info.toCharArray();
		fileout2.write(chararray, 0, 5);
		//void newLine()写一行行分隔符
		fileout2.newLine();
		fileout2.write(chararray, 0, 5);
		//void write(int c)写入一个字符
		fileout2.write(97);
		//void write(String s,int off,int len)写入一个字符串的一部分
		fileout2.write(info, 6, 5);
		//void flush()刷新流
		fileout2.flush();
		//void close()关闭流,先刷新
		fileout2.close();
	}

}

3.OutputStreamWriter类

OutputStreamWriter类构造方法

OutputStreamWriter(OutputStream out)将字节输出流转换为字符输出流

例如:

package com.Test1;

import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.io.OutputStreamWriter;

public class OutputStreamWriterTest {

	public static void main(String[] args) throws Exception{
		//价格字节输出流转换为字符输出流,好一次性直接写出字符串
		File file=new File("E:"+File.separator+"Test2"+File.separator+"test5.txt");
		OutputStream out=new FileOutputStream(file);
		OutputStreamWriter out2=new OutputStreamWriter(out);
		String info="hello,world";
		out2.write(info);
		out2.flush();
		out.close();
		out2.close();
		
	}

}

字符输入流---Reader类---抽象类---不能new---子类

1.FileReader类

FileReader类的构造方法

        FileReader(File file)给一个File对象构造一个FileReader对象

        FileReader(String fileName)给一个String对象构造一个FileReader对象

FileReader类的实例方法

        int        read()读一个字符,返回值是读取的真实字符数据的整数值,如果已经达到流的末尾,则为-1

        int        read(char[] cbuf)将字符读入数组。返回总字符数,如果到达文件末尾返回-1

        void         close()关闭流冰释放与之相关联的任何系统资源。

例如:

package com.Test2;

import java.io.File;
import java.io.FileReader;

public class FileReaderTest {

	public static void main(String[] args)throws Exception {
		//FileReader类的构造方法
		//FileReader(File file)给一个File对象构造一个FileReader对象
		File file=new File("E:"+File.separator+"Test2"+File.separator+"test5.txt");
		FileReader in=new FileReader(file);
		//FileReader(String fileName)给一个String对象构造一个FileReader对象。
		String info="E:"+File.separator+"Test2"+File.separator+"test5.txt";
		FileReader in2=new FileReader(info);
		
		//FileReader类的实例方法
		//int read()读一个字符,返回值是读取的真是字符数据的整数值,如果已经达到流的末尾,则为-1
		/*int temp=in.read();
		System.out.println("temp=="+temp);
		char char1=(char)temp;
		System.out.println("char1=="+char1);
		in.close();*/
		
		//int read()
		//定义保存字符的数组---数组的长度写入file文件的长度--file.length返回的是long值所以需要转换
		/*char chararray[]=new char[(int)file.length()];
		//定义数组下标
		int index=0;
		//定义保存每一个读取来的数据的整数变量
		int temp=0;
		while((temp=in.read())!=-1){
			chararray[index]=(char)temp;
			index++;
		}
		System.out.println(chararray);
		in.close();*/
		
		//void  read(char[] cbuf)将字符读入数组。返回总字符数,如果达到文件末尾返回-1
		//定义保存数据的数组
		char chararray[]=new char[(int)file.length()];
		int len=in.read(chararray);
		String info1=new String(chararray,0,len);
		System.out.println(info1);
		in.close();
	}

}

2.BufferdeReader类

BufferdeReader类构造方法

        BufferdeReader(Reader in)通过字符输入流创建一个BufferderReader

BufferdeReader类实例方法

        int         read()读一个字符,返回值是读取的真实字符数据的整数值,如果已经达到流的末尾,则为-1

        int        read(char[] cbuf)将字符读入数组,返回总字符数,如果达到文件末尾返回-1

        void        close()关闭流并释放与之相关联的任何系统资源

        String        readLine()读一行文字。

例如:

package com.Test2;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.Reader;

public class BufferdeReaderTest {

	public static void main(String[] args) throws Exception{
		//BufferedReader构造方法
		//BufferedReader(Reader in)通过字符输入流对象创建一个BufferedReader
		File file=new File("E:"+File.separator+"Test2"+File.separator+"test4.txt");
		Reader in= new FileReader(file);
		BufferedReader in2=new BufferedReader(in);
		
		//BufferedReader类实例方法
		//int  read()读一个字符,返回值是读取的真实字符数据的整数值,如果已经达到流的末尾,则为-1
		/*int index=in2.read();
		char temp=(char)index;
		System.out.println(temp);
		in2.close();
		in.close();*/
		
		//定义保存数据的数组
		/*char chararray[]=new char[(int)file.length()];
		//定义数组下表
		int index=0;
		//定义保存读取出来的数值
		int temp=0;
		while((temp=in2.read())!=-1){
			chararray[index]=(char)temp;
			index++;
		}
		System.out.println("chararray=="+chararray);
		in2.close();
		in.close();*/
		
		//int read(char cbuf)将字符读入数组,返回总字符数,如果达到文件末尾返回-1
		//定义保存数据的数组
		/*char chararray[]=new char[(int)file.length()];
		//返回值为总字符数---定义保存总字符数的变量
		int len=in2.read(chararray);
		
		String info=new String(chararray,0,len);
		System.out.println(info);
		in2.close();
		in.close();*/
		
		//String    readLine()读一行字
	/*	String info=in2.readLine();
		System.out.println(info);
		in2.close();
		in.close();*/
		
		//定义保存读取来的每一行数据
		String info=null;
		while((info=in2.readLine())!=null){
			System.out.println(info);
		}
		in2.close();
		in.close();
		//void close()关闭并释放与之相关联的任何系统资源
	}

}

BufferedReader        Scanner

readLine()从文件中读取        nextLine()从键盘中输入读取

我们能不能通过BufferedReader读取键盘输入的数据?

Scanner的nextLine()方法为什么可以读取键盘输入?

因为Scanner对象在创建的时候使用了System.in,System.in默认就是键盘输入。

只要在创建BufferedReader对象的时候,使用System.in就可以完成键盘输入。

BufferedReader(Reader in)参数是Reader字符输入流

System.in---InputStream类型字节输入流

 解决问题的关键就是将IputStream类型字节输入流转换成Reader字符输入流

3.InputStreamReader类【字节输入流转换成字符输入流】

InputStreamReader类构造方法

InputStreamReader(InputStyream in)字节输入流转换成字符输入流

例如:

package com.Test3;

import java.io.BufferedReader;
import java.io.InputStreamReader;

public class InputStreamReaderTest {

	public static void main(String[] args) throws Exception{
		//使用InputStreamReader将字节输入流转换为在字符输入流
		//InputStreamReader(InputStream in)构造方法---将字节输入流转换成字符输入流
		InputStreamReader test=new InputStreamReader(System.in);
		//字节输入流转换成字符输入流的变量传给BufferReader
		BufferedReader in=new BufferedReader(test);
		System.out.println("请输入姓名");
		String name=in.readLine();
		System.out.println("name=="+name);
		test.close();
		in.close();
	}

}

4.序列化---将一个java对象转换成2进制流数据过程

因为我们做的操作的java对象可能需要在多台计算机之间传递。

如何被序列化?

1.为被序列化的java对象的生成类实现一个序列化接口【Serializable】

        public interface  Serializable

        特殊---该接口中一个方法都没有

        类的序列化由实现java.io.Serializable接口的类启用

        不实现此接口的类将不会使任何状态序列化或反序列化

        可序列化类的所有子类型都是可序列化的

2.通过java提供ObjectOutputStream类的writeObject(Object obj)

        ObjectOutStream的构造方法

        ObjectOutStream(OutputStream out)创建一个写入指定的OutputStream的ObjectOutStream.

        实例方法

        void         writeObject(Object obj)将指定的对象写入ObjectOutputStream

例如:

package com.Test4;

import java.io.Serializable;

public class Student implements Serializable{
	public void getStudent(){
		System.out.println("Student类的实例方法");
	}
}
package com.Test4;

import java.io.File;
import java.io.FileOutputStream;
import java.io.ObjectOutputStream;
import java.io.OutputStream;

public class ObjectOutputStreamTest {

	public static void main(String[] args) throws Exception{
		//ObjectOutputStream的构造方法
		//ObjectOutputStream(OutputStream out)
		File file=new File("E:"+File.separator+"Test2"+File.separator+"student.txt");
		OutputStream out=new FileOutputStream(file);
		ObjectOutputStream out1=new ObjectOutputStream(out);
		//实例方法
		//void writeObject(Object obj)将指定的对象写入ObjectOutputStream
		Student student=new Student();
		out1.writeObject(student);
		out1.close();
		out.close();
	}

}

5.反序列化---将2进制流数据转换成java对象的过程

需要ObjectInputStream类的Object         readObject()方法读取对象

        ObjectInputStream类的构造方法

        ObjectInputStream(InputStram in)

        ObjectInputStream类的实例方法

        Object         readObject()从ObjectInputStream读取一个对象。

例如:

package com.Test4;

import java.io.File;
import java.io.FileOutputStream;
import java.io.ObjectOutputStream;
import java.io.OutputStream;

public class ObjectOutputStreamTest {

	public static void main(String[] args) throws Exception{
		//ObjectOutputStream的构造方法
		//ObjectOutputStream(OutputStream out)
		File file=new File("E:"+File.separator+"Test2"+File.separator+"student.txt");
		OutputStream out=new FileOutputStream(file);
		ObjectOutputStream out1=new ObjectOutputStream(out);
		//实例方法
		//void writeObject(Object obj)将指定的对象写入ObjectOutputStream
		Student student=new Student();
		out1.writeObject(student);
		out1.close();
		out.close();
		student.getStudent();
	}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值