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();
}
}