javaday46_IO流6_字节流与设备录入

1.字节流复制文件的4中方式:

package java_Studing_day46_IO流6_Byte;


import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;


public class copyMP4Test {


    public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub



//copy_1();
//copy_2();
//copy_3();
copy_4();

    }


    //第4中字节流复制文件方式,读一个,写一个,效率没有,千万别用这种方式!!!!
    private static void copy_4() throws IOException {
FileInputStream fis=new FileInputStream("d:\\d.mp4");
FileOutputStream fos=new FileOutputStream("d:\\dcopy4.mp4");


int ch=0;

while((ch=fis.read())!=-1){
   fos.write(ch);
   fos.flush();
   
}
fis.close();
fos.close();

    }




    //第3种复制文件的方式,获取刚刚好的数组作缓冲区
private static void copy_3() throws IOException {
    //创建流
    FileInputStream fis=new FileInputStream("d:\\d.mp4");

FileOutputStream fos=new FileOutputStream("d:\\dcopy3.mp4");



//自定义缓冲区,获取一个刚刚好的数组,数据较大时不建议使用
byte[] buf=new byte[fis.available()];
//刚刚好的数组,装一次,取一次
fis.read(buf);
fos.write(buf);

fos.close();
fis.close();


    }




//第2种复制文件的方式,利用已有缓冲区的方式
    public static void copy_2() throws IOException {
//创建流
FileInputStream fis=new FileInputStream("d:\\d.mp4");
//创建缓冲区
BufferedInputStream bfis=new BufferedInputStream(fis);

FileOutputStream fos=new FileOutputStream("d:\\dcopy2.mp4");
BufferedOutputStream bfos=new BufferedOutputStream(fos);


int ch=0;
//循环读写
while ((ch=bfis.read())!=-1){
   bfos.write(ch);
}
bfis.close();
bfos.close();
    }


    
    //第1种复制文件的方式,自定义缓冲区的方式
    public  static void copy_1() throws IOException {
//创建流
FileInputStream fis=new FileInputStream("d:\\d.mp4");

FileOutputStream fos=new FileOutputStream("d:\\dcopy1.mp4");



//自定义缓冲区
byte[] buf=new byte[1024];
int len=0;

//循环读写
while((len=fis.read(buf))!=-1){
   fos.write(buf, 0, len);
   
}
fos.close();
fis.close();



    }


}



2.键盘录入方式介绍:

package java_Studing_day46_IO流6_Byte;


import java.io.IOException;
import java.io.InputStream;


/**
 * 读取一个键盘录入的数据,并打印在控制台上
 * 键盘本身就是一个标准的输入设备,
 * 对于java而言,对于这类输入设备都有对应的对象
 * */
public class KeyRead {


    public static void main(String[] args) throws IOException {

       //readKey();
       readKey2();
      // System.out.println((int)'\r');
       //System.out.println((int)'\n');


    }

//第2种方式:
    private static void readKey2() throws IOException {
/**
* 自定义录入结束标志
* 1.需求:
* 获取用户录入的数据,并把数据变成大写显示在控制台上
* 如果用户输入的是over,结束键盘录入


* 思路:
* 1.因为键盘录入只读取一个字节,要判断是否OVER,需要将录入的字符转换成字符串
* 2.那就需要一个容器,StringBuilder
* 3.在用户回车之前将录入的数据转为字符串判断即可
* */

//1.创建容器
StringBuilder sb=new StringBuilder();
//2.获取键盘读取流
InputStream in=System.in;

//3.定义变量记录读取到的字节,并循环获取字节数据
int ch=0;
while((ch=in.read())!=-1){//=-1代表读到数据的末尾
//读一个字节,判断一下是否是回车符,不是就存起来,(相当于判断敲击回车键后的动作)
   if(ch=='\r'){
continue;
   }
  
   if (ch == '\n') {
String temp = sb.toString();//定义一个字符串临时变量,将容器里边的字符变成字符串存起来
if ("over".equals(temp))
    break;
System.out.println(temp.toUpperCase());//打印本次输入的字符串
sb.delete(0, sb.length());//清空容器里边的字符,保证下次的输入不会累加到上次
   }



  
   else
sb.append((char) ch);//将读取道德字节转换成字符串放到容器里边
   // System.out.println(ch);

}

    }

//第1种方式,标准代码
    public static void    readKey() throws IOException {


InputStream in=System.in; //打开一个键盘输入流in

int ch=in.read();//read()是阻塞式方法
System.out.println(ch);
int ch1=in.read();//read()是阻塞式方法
System.out.println(ch1);
int ch2=in.read();//read()是阻塞式方法
System.out.println(ch2);


// in.close();//默认的输入设备和默认的输出设备不需要关
//
// InputStream in2= System.in;  //打开一个键盘输入流in2
// int in3=in2.read();
}


}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值