字节流:FileInputStream 读取字节流
第一种读取方式:
FileInputStream fis = new FileInputStream(file);
int by =0;
while((by=fis.read())!=-1){
System.out.println(by);
}
第二种读取方式: read(byte[]);
byte[] buf = new byte[2];
int lent=0;
while((len = fis.read(buf)!=-1){
System.out.println(new String(buf,0,len));
}
缓冲区大小:
byte[] buf = new byte(fis.available());//创建了一个和文件大小一样的缓冲区
fis.read(buf);
String s= new String (buf);
字节流的缓冲区对象:
FileInputStream fis = new FileInputStream("teamp\\.1.jpg");
BufferedInputStream bufis = new BufferedInputStream(fis);//对流进行 缓冲
FileOutputStream fos = new FileOutputStream("teamfile\\copy.txt");
BufferedOutputStream bufos = new BufferedOutputStream(fos);//对流进行 缓冲
bufos.flush(); //缓冲流的刷新
***操作中文数据****
读取中文,按照字节的形式,但是一个中文GBK码表中是两个字节
而且字节流的read方法一次读取一个字节,如何获取到一个中文?
别读一个就操作,多读一些存起来,再操作,存到字节数组中,将字节数组转成字符串
String s = new String (bus,0,len);//将字节数组转成字符串,而且是按照默认的编码表(GBK)进行解码
***编码表****
Unnicode:
标识头信息
0....... 1个字节
110...... 10 ... 2 个字节
1110...... 10.... 10 .. 三个字节
中文编码表: 两个字节开头都是 1
GBK: 第一个是1开头, 第二个是0开头
*** InputStreamReader ***********
InputStreamReader是字节流通向字符流的桥梁,它使用指定的 charset 读取字节并解码为字符
InputStreamReader isr = new InputStreamReader(fis);
int ch = isr.read();
System.out.println((char)ch);
***** OutputStreamWriter *****
OutputStreamWriter 是字符流通向字节流的桥梁,它使用指定的 charset 读取字符并编码为字节
OutputStreamWriter osw = new OutputStreamWiter(fos);
osw.writr("你好");
//关闭资源。 flush()刷新完,流可以继续使用,close刷新完,直接关闭,流结束了,不能再写
字符流=字节流+编码表
*** 转换流的子类,
专门用于操作文本文件的流对象。
FileWriter fw = new FileWriter("tempfile\\fw.txt");
fw.write("你好");
read:
FileReader fr = new FileReader("tempfile\\fw.txt");
int ch =0;
while((ch=fr.read())!=-1){
System.out.println((char)ch);
}
对字符进行操作要选选择字符流。
BufferedWriter:
FileWriter fw = new FileWriter("tempfile\\bufw.txt");
BufferedWriter bufw = new BufferedWriter(fw);
bufw.write("abc");
*** 读取键盘录入:
BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));
bufr.readLine(); // 一次读一行
Scanner=流+正则表达式,方法都是按照某种规则在读取数据。