java中的输入输出流3


9.5.常用的字符输入与字符输出流类
1.字符输出流—顶级类Writer
public abstract class Writer—不能new
1.1FileWriter — 方便写字符文件
构造方法
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 wangxing20200828_1_1;
import java.io.File;
import java.io.FileWriter;
import java.io.Writer;
public class Lian1 {
	public static void main(String[] args)throws Exception {
		//FileWriter(File file) 给一个File对象构造一个FileWriter对象。
		String p="D:"+File.separator+"yingyong"+File.separator+"wr.txt";
		File file1=new File(p);
		FileWriter o1=new FileWriter(file1);
		//上转型
		Writer o2=new FileWriter(file1);
		//FileWriter(File file, boolean append) 给一个File对象构造一个是否允许追加FileWriter对象。 
		FileWriter o3=new FileWriter(file1,true);
		//FileWriter(String fileName) 给一个String对象构造一个FileWriter对象。
		FileWriter o4=new FileWriter(p);
		//上转型
		Writer o5=new FileWriter(p);
		//FileWriter(String fileName, boolean append)  给一个String对象构造一个是否允许追加FileWriter对象。
		FileWriter o6=new FileWriter(p,true);
	}
}

实例方法
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 wangxing20200828_1_1;
import java.io.File;
import java.io.FileWriter;
public class Lian2 {
	public static void main(String[] args)throws Exception {
		//创建字符输出流对象
		String p="D:"+File.separator+"yingyong"+File.separator+"wr.text";
		File file1=new File(p);
		FileWriter o1=new FileWriter(file1);
		//准备需要写出的数据
		String a1="xingxing,zhihuo";
		//void	write(char[] cbuf) 写入一个字符数组。
		/*char cha[]=a1.toCharArray();
		o1.write(cha,9,5);*/
		//void	write(int c) 写一个字符 
		/*char cha[]=a1.toCharArray();
		for(char c:cha) {
			o1.write(c);
		}*/
		//void	write(String str) 写一个字符串 
		//o1.write(a1);
		//void	write(String str, int off, int len) 写一个字符串的一部分。
		o1.write(a1,5,3);
		o1.flush();
		o1.close();
	}
}

运行结果

1.2 public class BufferedWriter—将文本写入字符输出流,缓冲字符,以提供单个字符,数组和字符串的高效写入。
构造方法
BufferedWriter(Writer out) 创建使用默认大小的输出缓冲区的缓冲字符输出流。
BufferedWriter(Writer out, int sz) 创建一个新的缓冲字符输出流,使用给定大小的输出缓冲区。

package wangxing20200828_2_1;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
public class Lian1 {
	public static void main(String[] args)throws Exception {
	//BufferedWriter(Writer out) 创建使用默认大小的输出缓冲区的缓冲字符输出流。
		String p="D:"+File.separator+"yingyong"+File.separator+"wr.txt";
		File file1=new File(p);
		FileWriter f1=new FileWriter(file1);//底层字符输出流
		BufferedWriter f2=new BufferedWriter(f1);//高级字符输出流
		//BufferedWriter(Writer out, int sz) 创建一个新的缓冲字符输出流,使用给定大小的输出缓冲区。 
		BufferedWriter f3=new BufferedWriter(f2,100);
	}
}

实例方法
void close() 关闭流,先刷新。
void flush() 刷新流。
void newLine() 写一行行分隔符。
void write(char[] cbuf, int off, int len) 写入字符数组的一部分。
void write(int c) 写一个字符
void write(String s, int off, int len) 写一个字符串的一部分。

package wangxing20200828_2_1;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
public class Lian2 {
	public static void main(String[] args)throws Exception {
		String p="D:"+File.separator+"yingyong"+File.separator+"wr.txt";
		File file1=new File(p);
		FileWriter f=new FileWriter(file1); //底层字符输出流
		BufferedWriter f1=new BufferedWriter(f);//高级字符输入流
		//准备输出的数据
		String a1="hello,liming";
		String a2="hello,xiaowang";
		//void	write(char[] cbuf, int off, int len) 写入字符数组的一部分。
		/*char cha[]=a1.toCharArray();
		f1.write(cha,0,5);*/
		char cha[]=a1.toCharArray();
		/*for(char c:cha) {
			f1.write(c);
		}*/
		//void	write(String s, int off, int len) 写一个字符串的一部分。
		//f1.write(a1);
		//void	newLine() 写一行行分隔符。
		f1.write(a1,0,a1.length());
		f1.newLine();
		f1.write(a2,0,a2.length());
		f1.flush();
		f1.close();
		f.close();
	}
}

运行结果

1.3 public class OutputStreamWriter—将字节输出流转换成字符输出流
构造方法
OutputStreamWriter(OutputStream out) 将字节输出流转换成字符输出流
实例方法
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 wangxing20200828_3_1;
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
public class Lian1 {
	public static void main(String[] args) throws Exception{
		String a1="hello,world";
		String p="D:"+File.separator+"yingyong"+File.separator+"wr.txt";
        FileOutputStream o=new FileOutputStream(p);
      //我们是可以通过FileOutputStream这个字节输出流将数据保存到文件中,
        //但是需要将被保存的文件转换成字节数组才可以。
        //如果我们不想将将被保存的文件转换成字节数组写出,这时我们可以通过OutputStreamWriter,
        //将字节输出流转换成字符输出流,直接写出String数据
        OutputStreamWriter ow=new OutputStreamWriter(o);
        ow.write(a1);
        ow.flush();
        ow.close();
        o.close();   
	}
}

运行结果

2.字符输入流—顶级类Reader
public abstract class Reader—不能new
2.1 FileReader—读取字符文件的
构造方法
FileReader(File file) 创建一个新的 FileReader ,给出 File读取。
FileReader(String fileName)创建一个新的 FileReader ,给定要读取的文件的名称。

package com.wangxing20200828_4_1;
import java.io.File;
import java.io.FileReader;
import java.io.Reader;
public class Lian1 {
	public static void main(String[] args)throws Exception {
	//FileReader(File file) 创建一个新的 FileReader ,给出 File读取。
	String p="D:"+File.separator+"dd"+File.separator+"wr.txt";	
	File file=new File(p);
    FileReader i1=new FileReader(file);
    Reader i2=new FileReader(file);
  //FileReader(String fileName)创建一个新的 FileReader ,给定要读取的文件的名称。 
    FileReader i3=new FileReader(p);
    Reader i4=new FileReader(p);
	}
}

实例方法
int read() 读一个字符。返回值是读取的真实字符数据的整数值,如果已经达到流的末尾,则为-1。
int read(char[] cbuf) 将字符读入数组。返回总字符数,如果到达文件末尾返回-1
void close() 关闭流并释放与之相关联的任何系统资源。

package com.wangxing20200828_4_1;
import java.io.File;
import java.io.FileReader;
public class Lian2 {
	public static void main(String[] args)throws Exception {
		String p="D:"+File.separator+"dd"+File.separator+"wr.txt";	
		File file=new File(p);
	    FileReader i1=new FileReader(file);
	   //int	read(char[] cbuf) 将字符读入数组。 返回总字符数,如果到达文件末尾返回-1
	    //char cha[]=new char[(int)file.length()];
	    /*int len=i1.read(cha);
	    System.out.println("len=="+len);
	    i1.close();
	    String info=new String(cha,0,len);
	    System.out.println(info);*/
	   //int	read() 读一个字符 
	    char cha[]=new char[(int)file.length()];
	  //保存每一次读取的字符数据
	    int data=0;
	  //定义数据访问下标
	    int len=0;
	    while((data=i1.read())!=-1) {
	    	cha[len]=(char)data;
	    	len++;
	    }
	    i1.close();
	    String info=new String(cha,0,len);
	    System.out.println(info);
	}
}

运行结果

2.2 public class BufferedReader–从字符输入流读取文本,缓冲字符,以提供字符,数组和行的高效读取。
构造方法
BufferedReader(Reader in) 创建使用默认大小的输入缓冲区的缓冲字符输入流。
BufferedReader(Reader in, int sz) 创建使用指定大小的输入缓冲区的缓冲字符输入流。

package com.wangxing20200828_5_1;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
public class Lian1 {
	public static void main(String[] args)throws Exception {
	//BufferedReader(Reader in) 创建使用默认大小的输入缓冲区的缓冲字符输入流。
	String p="D:"+File.separator+"dd"+File.separator+"wr.txt";
	File file=new File(p);
	FileReader in=new FileReader(file);
	BufferedReader b=new BufferedReader(in);
	//BufferedReader(Reader in, int sz) 创建使用指定大小的输入缓冲区的缓冲字符输入流。 
	BufferedReader b2=new BufferedReader(in,100);
	}
}

实例方法
int read() 读一个字符。返回值是读取的真实字符数据的整数值,如果已经达到流的末尾,则为-1。
int read(char[] cbuf) 将字符读入数组。返回总字符数,如果到达文件末尾返回-1
void close() 关闭流并释放与之相关联的任何系统资源。
String readLine() 读一行文字。

package com.wangxing20200828_5_1;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
public class Lian2 {
	public static void main(String[] args)throws Exception {
		String p="D:"+File.separator+"dd"+File.separator+"wr.txt";
		File file=new File(p);
		FileReader in=new FileReader(file);
		BufferedReader b=new BufferedReader(in);
		//String	readLine() 读一行文字。 
		//定义保存每一行数据的字符串变量
		String line=null;
		while((line=b.readLine())!=null) {
			System.out.println(line);
		}
		b.close();
		in.close();
	}
}

运行结果

使用BufferedReader的readLine方法来代替Scanner类的nextLine方法从控制台输入数据

package com.wang20200828_6_1;
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class Lian1 {
	public static void main(String[] args)throws Exception {
		BufferedReader b1=new BufferedReader(new InputStreamReader(System.in));
        System.out.println("请输入姓名");
        String name=b1.readLine();
        System.out.println("你输出的姓名是"+name);     
	}
}

运行结果

2.3 public class InputStreamReader—将字节输入流转换成字符输入流
构造方法
InputStreamReader(InputStream in) 将字节输入流转换成字符输入流
实例方法
int read() 读一个字符。返回值是读取的真实字符数据的整数值,如果已经达到流的末尾,则为-1。
int read(char[] cbuf) 将字符读入数组。返回总字符数,如果到达文件末尾返回-1
void close() 关闭流并释放与之相关联的任何系统资源。

package com.wang20200828_6_1;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStreamReader;
public class Lian2 {
	public static void main(String[] args)throws Exception {
		String p="D:"+File.separator+"dd"+File.separator+"wr.txt";
	     FileInputStream i=new FileInputStream(p);
	     InputStreamReader ireader=new InputStreamReader(i);
		 BufferedReader b=new BufferedReader(ireader);
		 String line=null;
		 while((line=b.readLine())!=null) {
			System.out.println(line);
		}
		b.close();
		ireader.close();
     	i.close();
	}
}

运行结果

9.6.输入输出流的操作步骤
输入输出的操作步骤:
1.创建文件对象【File对象】,指定输入输出的位置
2.创建输入输出流对象
1.文本选字符流,其他的选字节
2.读取选输入,保存选输出
3.调用read()/write()方法
4.关闭流

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值