IO框架(二)字节流
IO框架(二)字节流
字节流内容
字节流的父类
-
InputStream:字节输入流
-
方法
-
int available(); //返回此输入流下一个方法调用可以不受阻塞地从此输入流读取(或跳过)的估计字节数 -
void close(); //关闭此输入流并释放与该流关联的所有资源(用完流别忘了关闭) -
void mark(int readlimit); // 在此输入流中标记当前的位置 -
boolean markSupported(); //测试此输入流是否支持mark和reset方法 -
abstract int read(); //从输入流中读取数据的下一个字节 -
int read(byte[] b); //从输入流中读取一定数量的字节,并将其存储在缓冲区数组b中,读不到元素返回为-1 -
int read(byte[] b,int off,int len); //将输入流中最多len个数据字节读入byte数组 /* b -- 读取字节数组数据。 off -- 开始在目标数组b的偏移。 len -- 要读取的最大字节数 */ -
void reset(); //将此流重新定位到最后一次对此输入流调用mark方法时的位置 -
long skip(long n); //跳过和丢弃此输入流中数据的n个字节
-
-
-
OutputStream:字节输出流
-
方法
-
void close(); //关闭此输入流并释放与该流关联的所有资源(用完流别忘了关闭) -
void flush(); //刷新此输出流并强制写出所有缓冲的输出字节 -
void write(byte[] b); //将b.length个字节从指定的byte数组写入此输出流 -
void write(byte[] b,int off,int len); //将指定byte数组中从偏移量off开始的len个字节写入此输出流 -
abstract void write(int b); //将指定的字节写入此输出流
-
-
文件字节流
-
文件字节流是字节流的子类
-
FileInputStream:
-
public int read(byte[] b); //从流中读取多个字节,将读到内容存入b数组,返回实际读到的字节数;如果达到文件的尾部,则返回-1
-
-
FileOutputStream:
-
public void write(byte[] b); //一次写多个字节,将b数组中所有字节,写入输出流
-
FileInputStream
- 要先有文件才能再读文件
//输入1,2,3为用3种方式读数据,输入4代表退出
public class Demo01 {
public static void main(String[] args) throws Exception{
int flag=1;
Scanner a = new Scanner(System.in);
while (flag!=4) {
flag = Integer.parseInt(a.next());
if(flag==1) {
//创建文件字节输入流
//new FileInputStream中要写入文件路径
FileInputStream fis = new FileInputStream("D:\\aaa.txt");
System.out.println("--------------使用read()读单个字节---------------");
//read()读取单个字节
//通过循环读取全部字节
//通过read读取完之后的返回值为-1
//读完之后光标在最后面,不能再继续读了
int data = 0;
data = fis.read();
while (data != -1) {
//直接读是ascll编码,要做强转换
System.out.println((char) data);
data = fis.read();
}
fis.close();//读完别忘了关闭
System.out.println("------------读取完毕----------------");
}else if(flag==2) {
//创建文件字节输入流
//new FileInputStream中要写入文件路径
FileInputStream fis = new FileInputStream("D:\\aaa.txt");
System.out.println("--------------使用read()读单个字节---------------");
System.out.println("--------------使用read(b)读多个字节---------------");
System.out.println("--------------方式1---------------");
byte[] b = new byte[3];
System.out.println("读第一次");
//read(b)将输入流的元素存入b中同时返回读取到的元素个数
int count = fis.read(b);
//通过String()将内容转换为字符串
System.out.println(new String(b));
System.out.println("元素个数:" + count);
System.out.println("读第二次");
//read(b)将输入流的元素存入b中同时返回b的元素个数
//从刚才读的光标停止的位置继续往后读
int count2 = fis.read(b);
//通过String()将内容转换为字符串
System.out.println(new String(b));
System.out.println("元素个数:" + count2);
fis.close();//读完别忘了关闭
System.out.println("------------读取完毕----------------");
}else if(flag==3) {
//创建文件字节输入流
//new FileInputStream中要写入文件路径
FileInputStream fis = new FileInputStream("D:\\aaa.txt");
System.out.println("--------------使用read()读单个字节---------------");
System.out.println("--------------方式2 使用循环---------------");
byte[] b2 = new byte[3];
int count3 = 0;
//count3返回读取到的元素个数
while ((count3 = fis.read(b2)) != -1) {
System.out.println(new String(b2, 0, count3));//count3代表从b2中实际读取的字符个数
}
fis.close();//读完别忘了关闭
System.out.println("------------读取完毕----------------");
}
}
a.close();
System.out.println("退出成功");
}
}
//输出:
1
--------------使用read()读单个字节---------------
a
b
c
d
e
f
g
------------读取完毕----------------
2
--------------使用read()读单个字节---------------
--------------使用read(b)读多个字节---------------
--------------方式1---------------
读第一次
abc
元素个数:3
读第二次
def
元素个数:3
------------读取完毕----------------
3
--------------使用read()读单个字节---------------
--------------方式2 使用循环---------------
abc
def
g
------------读取完毕----------------
4
退出成功
FileOutputStream
- 如果没有文件则写的时候会自己创建一个文件
public class Demo02 {
public static void main(String[] args) throws Exception{
//创建文件字节输出流
//new FileOutputStream中要写入文件路径
FileOutputStream fis = new FileOutputStream("D:\\bbb.txt");
//下面代码方式1和方式2只能单独执行一个,因为执行完一个之后输出流就关闭了
//方式1
System.out.println("--------------使用write()写单个字节---------------");
fis.write(97);//97代表a
fis.write('b');
fis.write('c');
fis.close();
//方式2
System.out.println("--------------使用write()写多个字节---------------");
String s = "hello";
fis.write(s.getBytes());//将字节返回
fis.close();
System.out.println("退出成功");
}
}
字节流复制文件
public class Demo03 {
public static void main(String[] args) throws Exception{
//将aaa.txt复制到bbb.txt
//输入流
FileInputStream fis = new FileInputStream("D:\\aaa.txt");
//输出流
FileOutputStream fos = new FileOutputStream("D:\\bbb.txt");
//边读边写
byte[] bytes = new byte[1024];//一个byte是一个字节,1024个byte是1KB
int count = 0;
//读第一遍fis.read返回读到的元素个数,读第二遍因为光标已经在最后面所以读不到元素,返回为-1
while ((count=fis.read(bytes))!=-1){
fos.write(bytes,0,count);//将bytes中的数据从偏移0开始的count个字节写入fos中
}
}
}

浙公网安备 33010602011771号