二、流操作规律
- 键盘读取,控制台打印。
System.out: 对应的标准输出设备:控制台 //它是PrintStream对象,(PrintStream:打印流。OutputStream的子类)
System.in: 对应的标准输入设备:键盘 //它是InputStream对象
示例:
[java] view plain copy
-
/从键盘录入流,打印到控制台上/
-
public static void InOutDemo(){
-
//键盘的最常见的写法
-
BufferedReader bufr = null;
-
BufferedWriter bufw = null;
-
try {
-
/*InputStream ips = System.in; //从键盘读入输入字节流
-
InputStreamReader fr = new InputStreamReader(ips); //将字节流转成字符流
-
bufr = new BufferedReader(fr); */ //将字符流加强,提升效率
-
bufr = new BufferedReader(new InputStreamReader(System.in)); //匿名类。InputSteamReader:读取字节并将其解码为字符
-
bufw = new BufferedWriter(new OutputStreamWriter(System.out)); //OutputStreamWriter:要写入流中的字符编码成字节
-
String line = null;
-
while((line = bufr.readLine())!=null){
-
if("over".equals(line)) break;
-
bufw.write(line.toUpperCase()); //打印
-
bufw.newLine(); //为了兼容,使用newLine()写入换行符
-
bufw.flush(); //必须要刷新。不然不会显示
-
}
-
if(bufw!=null) {
-
bufr.close();
-
bufw.close();
-
}
-
}
-
catch (IOException e) {
-
e.printStackTrace();
-
}
-
}
-
}
-
整行录入
1.从键盘录入数据,并存储到文件中。 -
我们在键盘录入的是时候,read()方法是一个一个录入的,能不能整行的录入呢?这时候我们想到了BufferedReader中ReadLine()方法。
-
转换流
为了让字节流可以使用字符流中的方法,我们需要转换流。 -
InputStreamReader:字节流转向字符流;
a、获取键盘录入对象。
InputStream in=System.in;
b、将字节流对象转成字符流对象,使用转换流。
InputStreamReaderisr=new InputStreamReader(in);
c、为了提高效率,将字符串进行缓冲区技术高效操作。使用BufferedReader
BufferedReaderbr=new BufferedReader(isr);
//键盘录入最常见写法
BufferedReaderin=new BufferedReader(new InputStreamReader(System.in));
2.OutputStreamWriter:字符流通向字节流
示例:
[java] view plain copy
-
/==把键盘录入的数据存到一个文件中/
-
public static void inToFile() {
-
//键盘的最常见的写法
-
BufferedReader bufr = null;
-
BufferedWriter bufw = null;
-
try {
-
/*InputStream ips = System.in; //从键盘读入输入字节流
-
InputStreamReader fr = new InputStreamReader(ips); //将字节流转成字符流
-
bufr = new BufferedReader(fr); */ //将字符流加强,提升效率
-
bufr = new BufferedReader(new InputStreamReader(System.in)); //匿名类。InputSteamReader:读取字节并将其解码为字符
-
bufw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("out.txt"))); //OutputStreamWriter:要写入流中的字符编码成字节
-
String line = null;
-
while((line = bufr.readLine())!=null){
-
if("over".equals(line)) break;
-
bufw.write(line.toUpperCase()); //打印
-
bufw.newLine(); //为了兼容,使用newLine()写入换行符
-
bufw.flush(); //必须要刷新。不然不会显示
-
}
-
if(bufw!=null) {
-
bufr.close();
-
bufw.close();
-
}
-
}
-
catch (IOException e) {
-
e.printStackTrace();
-
}
-
}
-
流操作基本规律
为了控制格式我将其写入了Java代码段中,如下:
示例1:文本 ~ 文本
[java] view plain copy
- /*
- 流操作的基本规律。
- 一、两个明确:(明确体系)
-
- 明确源和目的
-
源:输入流 InputStream Reader
-
目的:输出流 OutputStream Writer
-
- 操作的数据是否是纯文本
-
是: 字符流
-
否: 字节流
- 二、明确体系后要明确具体使用的对象
-
通过设备区分:内存,硬盘,键盘
-
目的设备:内存,硬盘,控制台
- 示例1:将一个文本文件中的数据存储到另一个文件中: 复制文件
-
一、明确体系
-
源:文件-->读取流-->(InputStream和Reader)
-
是否是文本:是-->Reader
-
目的:文件-->写入流-->(OutputStream Writer)
-
是否纯文本:是-->Writer
-
二、 明确设备
-
源:Reader
-
设备:硬盘上一个文本文件 --> 子类对象为:FileReader
-
FileReader fr = new FileReader("Goods.txt");
-
是否提高效率:是-->加入Reader中的缓冲区:BufferedReader
-
BufferedReader bufr = new BufferedReader(fr);
-
目的:Writer
-
设备:键盘上一个文本文件 --> 子类对象:FileWriter
-
FileWriter fw = new FileWriter("goods1.txt");
-
是否提高效率:是-->加入Writer的缓冲区:BufferedWriter
-
BufferedWriter bufw = new BufferedWriter(fw);
- 示例2:将一个图片文件数据复制到另一个文件中:复制文件
-
一、明确体系
-
源:文件-->读取流-->(InputStream和Reader)
-
是否是文本:否-->InputStream
-
目的:文件-->写入流-->(OutputStream Writer)
-
是否纯文本:否-->OutputStream
-
二、 明确设备
-
源:InputStream
-
设备:硬盘上一个媒体文件 --> 子类对象为:FileInputStream
-
FileInputStream fis = new FileInputStream("Goods.txt");
-
是否提高效率:是-->加入InputStream中的缓冲区:BufferedInputStream
-
BufferedInputStream bufi = new BufferedInputStream(fis);
-
目的:OutputStream
-
设备:键盘上一个媒体文件 --> 子类对象:FileOutputStream
-
FileOutputStream fos = new FileOutputStream("goods1.txt");
-
是否提高效率:是-->加入OutputStream的缓冲区:BufferedOutputStream
-
BufferedOutputStream bufo = new BufferedOutputStream(fw);
- 示例3:将键盘录入的数据保存到一个文本文件中
-
一、明确体系
-
源:键盘-->读取流-->(InputStream和Reader)
-
是否是文本:是-->Reader
-
目的:文件-->写入流-->(OutputStream Writer)
-
是否纯文本:是-->Writer
-
二、 明确设备
-
源:InputStream
-
设备:键盘 --> 对用对象为:System.in --> InputStream
-
为了操作方便,转成字符流Reader --> 使用Reader中的转换流:InputStreamReader
-
InputStreamReader isr = new InputStreamReader(System.in);
-
是否提高效率:是-->加入Reader中的缓冲区:BufferedReader
-
BufferedReader bufr = new BufferedReader(isr);
-
目的:Writer
-
设备:键盘上一个文本文件 --> 子类对象:FileWriter
-
FileWriter fw = new FileWriter("goods1.txt");
-
是否提高效率:是-->加入Writer的缓冲区:BufferedWriter
-
BufferedWriter bufw = new BufferedWriter(fw);
5.指定编码表(转换流可以指定编码表)
要求:用UTF-8编码存储一个文本文件
[java] view plain copy
- import java.io.*;
- public class IOStreamLaw {
-
/**
-
* @param args
-
*/
-
public static void main(String[] args) throws IOException {
-
//键盘的最常见写法
-
BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));
-
BufferedWriter bufw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("goods1.txt"),"UTF-8"));
-
String line = null;
-
while((line=bufr.readLine())!=null){
-
if("over".equals(line)) break;
-
bufw.write(line.toUpperCase());
-
bufw.newLine();
-
bufw.flush();
-
}
-
bufr.close();
-
}
- }