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.关闭流
上一篇: shell的while循环&函数
下一篇: js基础