欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

java中的输入输出流3

程序员文章站 2024-03-23 22:06:40
...

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

运行结果
java中的输入输出流3
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();
	}
}

运行结果
java中的输入输出流3
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();   
	}
}

运行结果
java中的输入输出流3
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);
	}
}

运行结果
java中的输入输出流3
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();
	}
}

运行结果
java中的输入输出流3
使用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);     
	}
}

运行结果
java中的输入输出流3
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();
	}
}

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