int by = 0;
while((by=in.read())!=-1){
System.out.println(by);
}
}
publicstaticvoid readLineByKey() throws IOException {
//字节读取流
InputStream in =System.in;
//要想使用readLine方法读取一样,就要建立BufferReader对象
//但是该字符流的缓冲区,在对象在初始化时,
//要将一个字符对象作为参数传递给BufferReader的构造函数
//读取键盘是字节流,如何让字符流的缓冲区所使用呢?,这时就需要将字节流转成字节流
//想要进行字节和字符流的转换,就需要IO包中的转换流
//由于早期只有字节流,只有涉及到字符流之后才涉及到转换,故这个转换体系在字符流中。
//InputStreamReader的前面是字节流,后面是字符流。故通过它转换。
InputStreamReader isr = new InputStreamReader(in);
//因为BufferedReader只能包装字符流。故只需将isr传递进去就行了。
BufferedReader bufr = newBufferedReader(isr);
String line = null;
while((line=bufr.readLine())!=null){
if(line.equals("over")){
break;
}
//System.out.println(line.toUpperCase());
}
bufr.close();
}
}
package toto.IO;
/*流操作的基本规律
* 流操作要明确数据源和数据目的(数据汇)
*
* 在现有程序中,
* 源:键盘
* 目的控制台。
* 1、需求:将一个硬盘上的文件打印在控制台上
* 2、需求:将键盘录入的数据存储到一个文件中。
*
* */
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
publicclass TransStreamDemo2 {
publicstaticvoid main(String[] args) throws IOException {
/*InputStream in = System.in;
InputStreamReader isr = new InputStreamReader(in);
BufferedReader bufr = new BufferedReader(isr);*/
//上面三行可以转换成一行,读取键盘最方便方式,因为键盘录入的都是文本数据。所以一次读一行最方便,先将字节流包装成字符流,再将字符流写入缓冲区,提高效率。
/*BufferedReader bufr = new
BufferedReader(new InputStreamReader(System.in));*/
//硬盘上的文件是字节流,要将它转换成字符流,读取硬盘上的一个文件的方式:
BufferedReader bufr = new
BufferedReader(new InputStreamReader(new FileInputStream("文件地址")));
/*向控制台上输出,使用System.out
OutputStream out = System.out;
OutputStreamWriter osw = new OutputStreamWriter(out);
BufferedWriter bufw = new BufferedWriter(osw);*/
// BufferedWriter bufw = new BufferedWriter(new OutputStreamWriter(System.out));
//写需求1时,上面包装流中式文件路径,下面是System.out,当写需求2时,上面是System.in,下面是要写到的文件的路径。当上下都是文件名称时,相当于文件的复制。
BufferedWriter bufw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("要写到的文件的地址")));
String line = null;
while((line==bufr.readLine())!=null){
if("over".equals(line)){
break;
}
bufw.write(line.toUpperCase());
bufw.newLine();
bufw.flush();
}
bufw.close();
bufr.close();
}
}
IO包中对象其实都是以围绕读写为主,用于操作数据。
IO技术的难点:因为io包中的对象太多,在实际开发,不太容易明确使用哪个对象
IO操作的基本规律:
1、 作用的数据源和数据目的。
如果是操作数据源:输入流。(InputStream ,Reader),读入的是字节流用InputStream,读入的是字符流用Reader.
如果是操作数据汇:就是输入流。(OutputStream,Writer),输出成字节流用OutputStream,输出成字符用writer
2、 要操作的数据是不是纯文本数据。
如果是:使用字符流
如果不是:使用字节流。
3,根据源和目的的设备来确定要操作的对象。
无论数据源或者数据汇都有存在设备。
源设备:硬盘(File)。键盘(键盘对应的是System.in)。内存(内存对应的都是数组)。
目的设备:硬盘(File),控制台(控制台对应的是:System.out),内存(内存对应的是数组)。
这两个明确可以确定到底要使用上面四个体系中的那个体系。
需求一:对文本文件进行复制
1, 这个需求既有源又有目的
源:硬盘上的文件。InputStream Reader
目的:硬盘上的文件。OutputStream or Writer
是不是纯文本数据呢?是。
源:要使用字符读取流Reader
目的:要使用字符输出流Writer
那么体系确定后,要使用该体系中那个对象呢?
源:是一个文件。所以要使用字符读取流中可以操作文件的对象:FileReader
目的:也是一个文件,所以要使用字符写入流中的可以操作文件的对象:FileWriter
FileReader fr = new FileReader(“a.txt”);
FileWriter fw = new FileWriter(“b.txt”);
该操作过程中是否需要提高侠侣呢?是。
如果是:加入缓冲技术。
代码就变成:
BufferedReader bufr = new BufferedReader(newFileReader(“a.txt”))