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();
}
}