> 文档中心 > Java基础篇IO流操作总结

Java基础篇IO流操作总结

CSDN话题挑战赛第1期
活动详情地址:活动传送门
参赛话题:Java学习记录
话题描述:可以记录一下平时学习Java中的一些知识点、心得、例题、常见的问题解决

说明:

接着上一篇文档,这一篇主要是总结对文件的操作,包括了通过FileInputStream、、FileOutputStream、FileReader、FileWriter以及处理流的一种实现对图片、文本、视频的复制

程序目录

    • 1. FileInputStream、FileOutputStream对视频,图片的复制
    • 1.2 FileReader、FileWriter对文本的复制
    • 1.3 BufferedInputStream、BufferedOutputStream对图片、视频的复制
    • 1.4 BufferedReader 、BufferedWriter 对文本的复制

1. FileInputStream、FileOutputStream对视频,图片的复制

说明:在这里使用的是相对路径

图片的复制

 @Test    public void FileInputStreamOutputStreamTest() { FileInputStream fis = null; FileOutputStream fos = null; try {     //提供数据操作的对象     File srcfile = new File("爱情与友情.jpg");     File destfile = new File("爱情与友情3.jpg");     //创建数据流     fis = new FileInputStream(srcfile);     fos = new FileOutputStream(destfile);     //对数据的操作     byte[] buffer = new byte[10];     int len;     while ((len = fis.read(buffer)) != -1){  fos.write(buffer,0,len);     } } catch (IOException e) {     e.printStackTrace(); } finally {     //流资源的关闭     if (fis != null){  try {      fis.close();  } catch (IOException e) {      e.printStackTrace();  }     }     if (fos != null){  try {      fos.close();  } catch (IOException e) {      e.printStackTrace();  }     } }    }

视频的复制

//实现通用的文件的赋值    public void copuFile(String srcPath,String destPath){ FileInputStream fis = null; FileOutputStream fos = null; try {     //提供数据操作的对象     File srcfile = new File(srcPath);     File destfile = new File(destPath);     //创建数据流     fis = new FileInputStream(srcfile);     fos = new FileOutputStream(destfile);     //对数据的操作     byte[] buffer = new byte[1024];     int len;     while ((len = fis.read(buffer)) != -1){  fos.write(buffer,0,len);     } } catch (IOException e) {     e.printStackTrace(); } finally {     //流资源的关闭     if (fis != null){  try {      fis.close();  } catch (IOException e) {      e.printStackTrace();  }     }     if (fos != null){  try {      fos.close();  } catch (IOException e) {      e.printStackTrace();  }     } }    }    @Test    public void test(){ long start = System.currentTimeMillis(); String srcfile = "C:\\Users\\Administrator\\Desktop\\项目运行视频.mp4"; String destfile = "C:\\Users\\Administrator\\Desktop\\项目运行视频2.mp4"; copuFile(srcfile,destfile); long end = System.currentTimeMillis(); System.out.println("复制视频花费了"+(end - start) + "毫秒");    }

1.2 FileReader、FileWriter对文本的复制

@Test    public void testFileReaderWriter(){ FileReader fr = null; FileWriter fw = null; try {     //1.提供File类的对象,指明读入和写出的对象     File srcfile = new File("hello.txt");     File destfile = new File("hello2.txt");     //2.创建输入流和输出流的对象     fr = new FileReader(srcfile);     fw = new FileWriter(destfile);     //3.数据的操作     char[] cbuf = new char[5];     int len;//记录每次从cbuf数组中读取数据的长度     while ((len = fr.read(cbuf)) != -1){  fw.write(cbuf,0,len);//每一次从cbuf写出len个字符     } } catch (IOException e) {     e.printStackTrace(); } finally {     //4.流资源的关闭     if (fr != null){  try {      fr.close();  } catch (IOException e) {      e.printStackTrace();  }     }     if (fw != null){  try {      fw.close();  } catch (IOException e) {      e.printStackTrace();  }     } }    }

1.3 BufferedInputStream、BufferedOutputStream对图片、视频的复制

图片

@Test    public void BufferedTest(){ BufferedInputStream bis = null; BufferedOutputStream bos = null; try {     //创建数据操作的对象     File srcfile = new File("爱情与友情.jpg");     File destfile = new File("爱情与友情3.jpg");     //创建流对象     FileInputStream fis = new FileInputStream(srcfile);     FileOutputStream fos = new FileOutputStream(destfile);     bis = new BufferedInputStream(fis);     bos = new BufferedOutputStream(fos);     //进行数据的处理     byte[] buffer = new byte[10];     int len;     while ((len = bis.read(buffer)) != -1){  bos.write(buffer,0,len);     } } catch (IOException e) {     e.printStackTrace(); } finally {     //要求:关闭的时候先关闭外层的流,再关闭内层的流,【在关闭外层流的时候,内层的流也会被关闭】     //流资源的关闭     if (bis != null){  try {      bis.close();  } catch (IOException e) {      e.printStackTrace();  }     }     if (bos != null){  try {      bos.close();  } catch (IOException e) {      e.printStackTrace();  }     } }    }

视频

public void testBufferCopy(String srcPath,String destPath){ BufferedInputStream bis = null; BufferedOutputStream bos = null; try {     //创建数据操作的对象     File srcfile = new File(srcPath);     File destfile = new File(destPath);     //创建流对象     FileInputStream fis = new FileInputStream(srcfile);     FileOutputStream fos = new FileOutputStream(destfile);     bis = new BufferedInputStream(fis);     bos = new BufferedOutputStream(fos);     //进行数据的处理     byte[] buffer = new byte[1024];     int len;     while ((len = bis.read(buffer)) != -1){  bos.write(buffer,0,len);     } } catch (IOException e) {     e.printStackTrace(); } finally {     //要求:关闭的时候先关闭外层的流,再关闭内层的流,【在关闭外层流的时候,内层的流也会被关闭】     //流资源的关闭     if (bis != null){  try {      bis.close();  } catch (IOException e) {      e.printStackTrace();  }     }     if (bos != null){  try {      bos.close();  } catch (IOException e) {      e.printStackTrace();  }     } }    }    @Test    public void CopyBuffered(){ long start = System.currentTimeMillis(); String srcfile = new String("C:\\Users\\Administrator\\Desktop\\项目运行视频.mp4"); String destfile = new String("C:\\Users\\Administrator\\Desktop\\项目运行视频1.mp4"); testBufferCopy(srcfile,destfile); long end = System.currentTimeMillis(); System.out.println((end - start));    }

文本(实际上如果不输出,直接输入也可以实现对文本的操作)

@Test    public void testBufferedReaderBufferedWriter(){ BufferedReader br = null; BufferedWriter bw = null; try {     //1.创建操作文件的对象     File srcfile = new File("hello.txt");     File destfile = new File("hello3.txt");     //2.创建流对象     //节点流     FileReader fr = new FileReader(srcfile);     FileWriter fw = new FileWriter(destfile);     //处理流     br = new BufferedReader(fr);     bw = new BufferedWriter(fw);     //3.进行数据的处理     char[] cbuf = new char[1024];     int len;     while ((len = br.read(cbuf)) != -1){  bw.write(cbuf,0,len);     } } catch (IOException e) {     e.printStackTrace(); } finally {     //4.资源流的关闭     if (br != null){  try {      br.close();  } catch (IOException e) {      e.printStackTrace();  }     }     if (bw != null){  try {      bw.close();  } catch (IOException e) {      e.printStackTrace();  }     } }    }

1.4 BufferedReader 、BufferedWriter 对文本的复制

@Test    public void testBufferedReaderBufferedWriter(){ BufferedReader br = null; BufferedWriter bw = null; try {     //1.创建操作文件的对象     File srcfile = new File("hello.txt");     File destfile = new File("hello3.txt");     //2.创建流对象     //节点流     FileReader fr = new FileReader(srcfile);     FileWriter fw = new FileWriter(destfile);     //处理流     br = new BufferedReader(fr);     bw = new BufferedWriter(fw);     //3.进行数据的处理     char[] cbuf = new char[1024];     int len;     while ((len = br.read(cbuf)) != -1){  bw.write(cbuf,0,len);     } } catch (IOException e) {     e.printStackTrace(); } finally {     //4.资源流的关闭     if (br != null){  try {      br.close();  } catch (IOException e) {      e.printStackTrace();  }     }     if (bw != null){  try {      bw.close();  } catch (IOException e) {      e.printStackTrace();  }     } }    }

总结:
在使用的时候,使用缓冲流的情况下执行的速度会比较快,为了提高数据读写的速度,Java API提供了带缓冲功能的流类,在使用这些流类时,会创建一个内部缓冲区数组,缺省使用8192个字节(8Kb)的缓冲区。掌握两类字符流和字节流的操作之后,其余的都是雷同的。

神唱ktv下载