常用的字符输入与字符输出流类
1.字符输出流顶级类:Writer
public abstract class Writer—不能new
1.1 FileWriter — 方便写字符文件
(1)构造方法
package com.wangxing.test1;
import java.io.File;
import java.io.FileWriter;
import java.io.Writer;
public class TestWriter1 {
public static void main(String[] args)throws Exception {
//FileWriter(File file) 给一个File对象构造一个FileWriter对象。
String path="F:"+File.separator+"test"+File.separator+"msg.txt";
File file1=new File(path);
FileWriter out1=new FileWriter(file1);
Writer out11=new FileWriter(file1);
//FileWriter(File file, boolean append) 给一个File对象构造一个是否允许追加FileWriter对象。
FileWriter out2=new FileWriter(file1,true);
Writer out22=new FileWriter(file1,true);
//FileWriter(String fileName) 给一个String对象构造一个FileWriter对象。
FileWriter out3=new FileWriter(path);
Writer out33=new FileWriter(path);
//FileWriter(String fileName, boolean append) 给一个String对象构造一个是否允许追加FileWriter对象。
FileWriter out4=new FileWriter(path,true);
Writer out44=new FileWriter(path,true);
}
}
(2)实例方法
package com.wangxing.test1;
import java.io.File;
import java.io.FileWriter;
import java.io.Writer;
public class TestWriter2 {
public static void main(String[] args)throws Exception {
//创建字符输出流对象
String path="F:"+File.separator+"test"+File.separator+"msg.txt";
File file1=new File(path);
FileWriter out1=new FileWriter(file1);
//准备需要写出的数据
String info="hello,world";
/*
//void write(char[] cbuf) 写入一个字符数组。
char cbuf[]=info.toCharArray();
out1.write(cbuf);
*/
/*
//void write(char[] cbuf, int off, int len) 写入字符数组的一部分。
char cbuf[]=info.toCharArray();
out1.write(cbuf,6,5);
*/
/*
//void write(int c) 写一个字符
char cbuf[]=info.toCharArray();
for(char c:cbuf) {
out1.write(c);
}
*/
/*
//void write(String str) 写一个字符串
out1.write(info);
*/
//void write(String str, int off, int len) 写一个字符串的一部分。
out1.write(info,6,5);
out1.flush();
out1.close();
}
}
1.2 BufferedWriter:将文本写入字符输出流,缓冲字符。
(1)构造方法
package com.wangxing.test2;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
public class TestBufferedWriter1 {
public static void main(String[] args)throws Exception {
//BufferedWriter(Writer out) 创建使用默认大小的输出缓冲区的缓冲字符输出流。
String path="F:"+File.separator+"test"+File.separator+"msg.txt";
File file=new File(path);
FileWriter out=new FileWriter(file); //底层字符输出流
BufferedWriter bout1=new BufferedWriter(out);//高级字符输出流
//BufferedWriter(Writer out, int sz) 创建一个新的缓冲字符输出流,使用给定大小的输出缓冲区。
BufferedWriter bout2=new BufferedWriter(out,100);//高级字符输出流
}
}
(2)实例方法
package com.wangxing.test2;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
public class TestBufferedWriter2 {
public static void main(String[] args)throws Exception {
//创建字符输出流对象
String path="F:"+File.separator+"test"+File.separator+"msg.txt";
File file=new File(path);
FileWriter out=new FileWriter(file); //底层字符输出流
BufferedWriter bout1=new BufferedWriter(out);//高级字符输出流
//准备输出的数据
String info1="hello,world";
String info2="hello,world";
/*
//void write(char[] cbuf, int off, int len) 写入字符数组的一部分。
char array[]=info.toCharArray();
bout1.write(array, 0, 5);
*/
/*
//void write(int c) 写一个字符
char array[]=info.toCharArray();
for(char c:array) {
bout1.write(c);
}
*/
/*
//void write(String s, int off, int len) 写一个字符串的一部分。
bout1.write(info, 0, info.length());
*/
bout1.write(info1, 0, info1.length());
//void newLine() 写一行行分隔符。
bout1.newLine();
bout1.write(info2, 0, info2.length());
bout1.flush();
bout1.close();
out.close();
}
}
1.3 OutputStreamWriter:将字节输出流转换成字符输出流
(1)构造方法
OutputStreamWriter(OutputStream out) 将字节输出流转换成字符输出流
(2)实例方法
package com.wangxing.test3;
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
public class TestOutputStreamWriter {
public static void main(String[] args)throws Exception {
String info="hello,world";
String path="F:"+File.separator+"test"+File.separator+"msg.txt";
FileOutputStream out=new FileOutputStream(path);
//我们是可以通过FileOutputStream这个字节输出流将数据保存到文件中,
//但是需要将被保存的文件转换成字节数组才可以。
//如果我们不想将将被保存的文件转换成字节数组写出,这时我们可以通过OutputStreamWriter,
//将字节输出流转换成字符输出流,直接写出String数据
OutputStreamWriter owtiter=new OutputStreamWriter(out);
owtiter.write(info);
owtiter.flush();
owtiter.close();
out.close();
}
}
2.字符输入流顶级类:Reader
public abstract class Reader—不能new
2.1 FileReader:读取字符文件的
(1)构造方法
package com.wangxing.test1;
import java.io.File;
import java.io.FileReader;
import java.io.Reader;
public class TestFileReader1 {
public static void main(String[] args)throws Exception {
//FileReader(File file) 创建一个新的 FileReader ,给出 File读取。
String path="F:"+File.separator+"test"+File.separator+"msg.txt";
File file1=new File(path);
FileReader in1=new FileReader(file1);
Reader in11=new FileReader(file1);
//FileReader(String fileName)创建一个新的 FileReader ,给定要读取的文件的名称。
FileReader in2=new FileReader(path);
Reader in22=new FileReader(path);
}
}
(2)实例方法
package com.wangxing.test1;
import java.io.File;
import java.io.FileReader;
import java.io.Reader;
public class TestFileReader2 {
public static void main(String[] args)throws Exception {
//创建输入流对象
String path="F:"+File.separator+"test"+File.separator+"msg.txt";
File file1=new File(path);
FileReader in1=new FileReader(file1);
/*
//int read(char[] cbuf) 将字符读入数组。 返回总字符数,如果到达文件末尾返回-1
char cbuf[]=new char[(int)file1.length()];
int len=in1.read(cbuf);
System.out.println("len=="+len);
in1.close();
String info=new String(cbuf,0,len);
System.out.println(info);
*/
//int read() 读一个字符
char cbuf[]=new char[(int)file1.length()];
//保存每一次读取的字符数据
int data=0;
//定义数据访问下标
int len=0;
while((data=in1.read())!=-1) {
cbuf[len]=(char)data;
len++;
}
in1.close();
String info=new String(cbuf,0,len);
System.out.println(info);
}
}
2.2 public class BufferedReader:从字符输入流读取文本
(1)构造方法
package com.wangxing.test2;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
public class TestBufferedReader1 {
public static void main(String[] args)throws Exception {
//BufferedReader(Reader in) 创建使用默认大小的输入缓冲区的缓冲字符输入流。
String path="F:"+File.separator+"test"+File.separator+"msg.txt";
File file=new File(path);
FileReader in=new FileReader(file);
BufferedReader bin1=new BufferedReader(in);
//BufferedReader(Reader in, int sz) 创建使用指定大小的输入缓冲区的缓冲字符输入流。
BufferedReader bin2=new BufferedReader(in,100);
}
}
(2)实例方法
package com.wangxing.test2;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
public class TestBufferedReader2 {
public static void main(String[] args)throws Exception {
String path="F:"+File.separator+"test"+File.separator+"msg.txt";
File file=new File(path);
FileReader in=new FileReader(file);
BufferedReader bin1=new BufferedReader(in);
//String readLine() 读一行文字。
//定义保存每一行数据的字符串变量
String line=null;
while((line=bin1.readLine())!=null) {
System.out.println(line);
}
bin1.close();
in.close();
}
}
使用BufferedReader的readLine方法来代替Scanner类的nextLine方法从控制台读取数据
package com.wangxing.test2;
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class TestBufferedReader3 {
public static void main(String[] args)throws Exception {
BufferedReader bin1=new BufferedReader(new InputStreamReader(System.in));
System.out.println("请输入姓名:");
String name=bin1.readLine();
System.out.println("你输入的姓名是==="+name);
}
}
2.3 InputStreamReader:将字节输入流转换成字符输入流
(1)构造方法
InputStreamReader(InputStream in) 将字节输入流转换成字符输入流
(2)实例方法
package com.wangxing.test3;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStreamReader;
public class TestInputStreamReader {
public static void main(String[] args)throws Exception {
String path="F:"+File.separator+"test"+File.separator+"msg.txt";
FileInputStream in=new FileInputStream(path);
InputStreamReader ireader=new InputStreamReader(in);
BufferedReader bin=new BufferedReader(ireader);
String line=null;
while((line=bin.readLine())!=null) {
System.out.println(line);
}
bin.close();
ireader.close();
in.close();
}
}
3.输入输出流的操作步骤
1.创建文件对象【File对象】,指定输入输出的位置
2.创建输入输出流对象
1.文本选字符流,其他的选字节
2.读取选输入,保存选输出
3.调用read()/write()方法
4.关闭流