IO拷贝代码
Posted 技术很low的瓜贼
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了IO拷贝代码相关的知识,希望对你有一定的参考价值。
文章目录
IO拷贝代码:
一、文件字节流拷贝方式
1.字节流拷贝图片:
// 图片的字节流拷贝
public static void copy()
FileInputStream fis = null;
FileOutputStream fos = null;
try
fis = new FileInputStream("g:/dog.jpg");
fos = new FileOutputStream("g:/dog2.jpg");
System.out.println("图片正在拷贝");
int res = 0;
while ((res = fis.read()) != -1)
fos.write(res);
System.out.println("图片拷贝成功");
catch (IOException e)
e.printStackTrace();
finally
if (null != fos)
try
fos.close();
catch (IOException e)
e.printStackTrace();
if (null != fis)
try
fis.close();
catch (IOException e)
e.printStackTrace();
2.视频的字节流拷贝方式一(以单个字节形式进行拷贝)
// 视频拷贝的字节流方式
// 以单个字节的形式进行拷贝
public static void copyVideo1()
System.out.println("以字节流方式进行拷贝,考完一个字节完成再拷贝另外一个,会特别慢,不建议");
FileInputStream fis = null;
FileOutputStream fos = null;
try
fis = new FileInputStream("g:/111111.mp4");
fos = new FileOutputStream("g:/(111111).mp4");
System.out.println("正在以方式一拷贝");
int res = 0;
while ((res = fis.read()) != -1)
fos.write(res);
System.out.println("拷贝成功");
catch (IOException e)
e.printStackTrace();
finally
if (null != fos)
try
fos.close();
catch (IOException e)
e.printStackTrace();
if (null != fis)
try
fis.close();
catch (IOException e)
e.printStackTrace();
3.视频的字节流拷贝方式二(申请视频(文件)大小的一维数组缓冲区)
// 以一维数组作为缓冲区进行拷贝
// 缺点:若文件过大,无法申请太大的一维数组缓冲区
public static void copyVideo2()
FileInputStream fis = null;
FileOutputStream fos = null;
try
fis = new FileInputStream("g:/111111.mp4");
fos = new FileOutputStream("g:/222222.mp4");
System.out.println("正在玩命地拷贝...");
int len = fis.available();
byte[] bArr = new byte[len];
// 不可缺少,读取文件进如字节数组
fis.read(bArr);
fos.write(bArr);
System.out.println("拷贝文件成功!");
catch (IOException e)
e.printStackTrace();
finally
// 4.关闭流对象并释放有关的资源
if (null != fos)
try
fos.close();
catch (IOException e)
e.printStackTrace();
if (null != fis)
try
fis.close();
catch (IOException e)
e.printStackTrace();
4.视频的字节流拷贝方式三(固定缓冲区大小,分多次拷贝)
// 固定缓冲区大小,分多次拷贝
public static void copyVideo3()
long l1 = System.currentTimeMillis();
FileInputStream fis = null;
FileOutputStream fos = null;
try
fis = new FileInputStream("g:/111111.mp4");
fos = new FileOutputStream("g:/333333.mp4");
System.out.println("正在以第三种方式拷贝");
int res = 0;
// 正常申请1024的倍数的缓冲区大小
byte[] bArr = new byte[1024];
while((res=fis.read(bArr)) != -1)
fos.write(bArr, 0, res);
System.out.println("拷贝成功");
catch (IOException e)
e.printStackTrace();
finally
if (null != fos)
try
fos.close();
catch (IOException e)
e.printStackTrace();
if (null != fis)
try
fis.close();
catch (IOException e)
e.printStackTrace();
long l2 = System.currentTimeMillis();
System.out.println("拷贝时间为" + (l2 - l1));
二、文件字符流拷贝方式
1.文件字符流拷贝文件(只能处理文本文件)
/**
* 通过字符流实现文件拷贝
* 字符流只能处理文本文件
* 无法拷贝图片
*/
public class FileCharCopyTest
public static void copy()
FileReader fr = null;
FileWriter fw = null;
try
fr = new FileReader("g:/a.txt");
fw = new FileWriter("g:/b.txt");
System.out.println("文件正在拷贝");
int res = 0;
while((res = fr.read()) != -1)
fw.write(res);
System.out.println("文件拷贝完成");
catch (IOException e)
e.printStackTrace();
finally
// 通常情况先创建的后关闭,后创建的先关闭
if (null != fw)
try
fw.close();
catch (IOException e)
e.printStackTrace();
if (null != fr)
try
fr.close();
catch (IOException e)
e.printStackTrace();
public static void main(String[] args)
FileCharCopyTest.copy();
三、缓冲字节流拷贝方式
1.视频的字节流拷贝方式四( 缓冲字节流拷贝视频(通常使用方式))
// 在外部添加缓冲区的方式(通常使用方式)
public static void copy1()
// 获取当前时间对于1970年的毫秒数
long l1 = System.currentTimeMillis();
BufferedInputStream bis = null;
BufferedOutputStream bos = null;
try
bis = new BufferedInputStream(new FileInputStream("g:/111111.mp4"));
bos = new BufferedOutputStream(new FileOutputStream("g:/(111111).mp4"));
System.out.println("正在以缓冲流的方式进行拷贝");
byte[] bArr = new byte[1024];
int res = 0;
while ((res=bis.read(bArr)) != -1)
bos.write(bArr, 0, res);
System.out.println("拷贝完成");
catch (IOException e)
e.printStackTrace();
finally
if (null != bos)
try
bos.close();
catch (IOException e)
e.printStackTrace();
if (null != bis)
try
bis.close();
catch (IOException e)
e.printStackTrace();
long l2 = System.currentTimeMillis();
System.out.println("拷贝时间为" + (l2 - l1));
四、缓冲字符流拷贝方式
1.缓冲字符流拷贝文件
public static void copy1()
BufferedReader br = null;
BufferedWriter bw = null;
try
br = new BufferedReader(new FileReader("g:/a.txt"));
bw = new BufferedWriter(new FileWriter("g:/c.txt"));
System.out.println("正在拷贝");
String str = null;
while ((str=br.readLine()) != null)
bw.write(str);
// 用于写于行分隔符到输出流中
bw.newLine();
System.out.println("拷贝成功");
catch (IOException e)
e.printStackTrace();
finally
if (null != bw)
try
bw.close();
catch (IOException e)
e.printStackTrace();
if (null != br)
try
br.close();
catch (IOException e)
e.printStackTrace();
以上是关于IO拷贝代码的主要内容,如果未能解决你的问题,请参考以下文章
急切求高手编写一个 java程序,大体是关于IO流的文件拷贝