一、字节流复制文本文件
需求:把E盘下的abc.txt文件复制到F盘下的abc.txt中
分析:
1.复制文本文件,其实就是把文本文件的内容从一个文件中读出(数据源),然后写入到另一个文件中(目的地)
2.数据源:E:\\abc.txt ——>需要读数据——>InputStream——>最终实现类FileInputStream
3.目的地:F:\\abc.txt——>需要写数据——>OutputStream——>最终实现类FileInputStream
步骤:
1.根据数据源创建字节输入流对象
2.根据目的地创建字节输出流对象
3.读写数据,复制文本文件(一次读取一个字节、一次写入一个字节;)
4.释放资源
/*需求:把E盘下的abc.txt文件复制到F盘下的abc.txt中
分析:
1.复制文本文件,其实就是把文本文件的内容从一个文件中读出(数据源),然后写入到另一个文件中(目的地)
2.数据源:E:\\\abc.txt ——>需要读数据——>InputStream——>最终实现类FileInputStream
3.目的地:F:\\\abc.txt——>需要写数据——>OutputStream——>最终实现类FileInputStream
步骤:
1.根据数据源创建字节输入流对象
2.根据目的地创建字节输出流对象
3.读写数据,复制文本文件(一次读取一个字节、一次写入一个字节;建议使用循环方式)
4.释放资源
* */
public class Demo02 {
public static void main(String[] args) throws IOException {
//根据数据源创建字节输入流对象
FileInputStream fips=new FileInputStream("E:\\abc.txt");
//根据目的地创建字节输出流对象
FileOutputStream fops=new FileOutputStream("F:\\abc.txt");
//读写数据,复制文本文件(一次读取一个字节、一次写入一个字节;建议使用循环方式)
int by;
while((by=fips.read())!=-1){
fops.write(by);
}
//释放资源
fops.close();
fips.close();
}
}
二、字节流复制图片
需求:把E盘下的123.jpg图片复制到F盘下的123.jpgt中
步骤:
1.根据数据源创建字节输入流对象
2.根据目的地创建字节输出流对象
3.读写数据,复制图片(一次读取一个字节数组数据、一次写入一个字节数组数据;)
4.释放资源
/*需求:把E盘下的123.jpg图片复制到F盘下的123.jpgt中
步骤:
1.根据数据源创建字节输入流对象
2.根据目的地创建字节输出流对象
3.读写数据,复制图片(一次读取一个字节数组数据、一次写入一个字节数组数据;)
4.释放资源
* */
public class Demo03 {
public static void main(String[] args) throws IOException {
//根据数据源创建字节输入流对象
FileInputStream fips=new FileInputStream("E:\\123.jpg");
FileOutputStream fops=new FileOutputStream("F:\\123.jpg");
//读写数据,复制图片(一次读取一个字节数组数据、一次写入一个字节数组数据;)
byte[]bytes=new byte[1024];
int len;
while((len=fips.read(bytes))!=-1){
fops.write(new String(bytes,0,len).getBytes);
fops.flush();//清除缓存
}
//释放资源
fops.close();
fips.close();
}
}
容易出现的问题:
我在写完之后发现复制后的图片双击打不开,再回去看代码,也没几行,我觉得问题应该是出在了字节数组转字符串再转字节数组那一行,猜测应该是二进制数据在转成字符串后出现了问题,再转回去的数据不是之前的了,所以写入的数据不是之前的图片的二进制数据,才会出现损坏或不被识别。 尝试对这一行进行修改,既然转String出现问题,那么就不转了,直接写字节数组
/*需求:把E盘下的123.jpg图片复制到F盘下的123.jpgt中
步骤:
1.根据数据源创建字节输入流对象
2.根据目的地创建字节输出流对象
3.读写数据,复制图片(一次读取一个字节数组数据、一次写入一个字节数组数据;)
4.释放资源
* */
public class Demo03 {
public static void main(String[] args) throws IOException {
//根据数据源创建字节输入流对象
FileInputStream fips=new FileInputStream("E:\\123.jpg");
FileOutputStream fops=new FileOutputStream("F:\\123.jpg");
//读写数据,复制图片(一次读取一个字节数组数据、一次写入一个字节数组数据;)
byte[]bytes=new byte[1024];
int len;
while((len=fips.read(bytes))!=-1){
fops.write(bytes,0,len);
fops.flush();//清除缓存
}
//释放资源
fops.close();
fips.close();
}
}
完美解决!!!
三、字节流复制视频
需求:把E盘下的123.mp4图片复制到F盘下的123.mp4t中
步骤:
1.根据数据源创建字节输入流对象
2.根据目的地创建字节输出流对象
3.读写数据,复制视频(4种方式,基本字节流一次读写一个字节、一次读写一个字节数组数据;字节缓冲流一次读写一个字节、一次读写一个字节数组)
4.释放资源
/*需求:把E盘下的123.mp4图片复制到F盘下的123.mp4
步骤:
1.根据数据源创建字节输入流对象
2.根据目的地创建字节输出流对象
3.读写数据,复制视频(4种方式,基本字节流一次读写一个字节、一次读写一个字节数组数据;字节缓冲流一次读写一个字节、一次读写一个字节数组)
4.释放资源
* */
public class Demo05 {
public static void main(String[] args) throws IOException {
//记录开始时间
long startime=System.currentTimeMillis();
//方式一
method1();
//方式二
method2();
//方式三
method3();
//方式4
method4();
//记录结束时间
long endtime= System.currentTimeMillis();
System.out.println("共用时"+(endtime-startime)+"毫秒");
}
//方法一,使用基本字节流实现一次读取一个字节
public static void method1() throws IOException {
FileOutputStream fops=new FileOutputStream("F:\\123.mp4");
FileInputStream fips=new FileInputStream("E:\\123.mp4");
//一次读取一个数据
int by;
while((by=fips.read())!=-1){
fops.write(by);
}
fops.close();
fips.close();
}
//方法二,一次读取一个字节数组数据
public static void method2() throws IOException {
FileInputStream fips=new FileInputStream("E:\\123.mp4");
FileOutputStream fops=new FileOutputStream("F:\\123.mp4");
//一次读取一个数据
byte []bytes=new byte[1024];
int len;
while((len=fips.read(bytes))!=-1){
fops.write(bytes,0,len);
}
fops.close();
fips.close();
}
//方法三,使用字节缓冲流一次读取一个字节
public static void method4() throws IOException {
//创建字节缓冲流对象
BufferedInputStream bips=new BufferedInputStream(new FileInputStream("E:\\123.mp4"));
BufferedOutputStream bops=new BufferedOutputStream(new FileOutputStream("F:\\123.mp4"));
//一次读取一个字节数据
int by;
while((by=bips.read())!=-1){
bops.write(by);
}
bips.close();
bops.close();
}
//方法四,使用字节缓冲流一次读取一个字节数组数据
public static void method3() throws IOException {
//创建字节缓冲流对象
BufferedInputStream bips=new BufferedInputStream(new FileInputStream("E:\\123.mp4"));
BufferedOutputStream bops=new BufferedOutputStream(new FileOutputStream("F:\\123.mp4"));
//一次读取一个字节数组数据
byte []bytes=new byte[1024];
int len;
while((len=bips.read(bytes))!=-1){
bops.write(bytes,0,len);
}
bips.close();
bops.close();
}
}