代码示例:
/* * 1.流的分类: * 按照数据流向的不同:输入流 输出流 * 按照处理数据的单位的不同: 字节流 字符流(处理的文本文件) * 按照角色不同:节点流(直接作用于文件的) 处理流 * * 2.IO的体系: * 抽象基类 节点流 * InputSteam FileInputStream * OutputSteam FileOutputStream * Reader FileReader * Writer FileWriter * */ public class TestIOStream { @Test public void testCopyFile() { long start = System.currentTimeMillis(); String src = "D:\\迅雷下载\\1.mkv"; String dest = "C:\\Users\\Li Peter\\Desktop\\Java\\01day\\2.mkv"; copyFile(src, dest); long end = System.currentTimeMillis(); System.out.println("花费的时间:" + (end - start)); } //实现文件复制的方法 @SuppressWarnings("all") public void copyFile(String src, String dest) { //1.提供读入、写出的文件 File file1 = new File(src); File file2 = new File(dest); //2.提供相应的流 FileInputStream fis = null; FileOutputStream fos = null; try { fis = new FileInputStream(file1); fos = new FileOutputStream(file2); //3.实现文件的复制 byte[] b = new byte[1024*1024]; //1454.08*1024*1024/(1024*1024) //具体问题具体分析写数组值的大小 int len; while ((len = fis.read(b)) != -1) { // fos.write(b); //错误的写法两种: fos.write(b, 0, b.length); fos.write(b, 0, len); } } catch (IOException e) { e.printStackTrace(); } finally { if (fos != null) { try { fos.close(); } catch (IOException e) { e.printStackTrace(); } } if (fis != null) { try { fis.close(); } catch (IOException e) { e.printStackTrace(); } } } } //从硬盘读取一个文件,并写入到另一个位置。(相当于文件的复制) @Test public void testFileInputOutputStream() { //1.提供读入、写出的文件 File file1 = new File("C:\\Users\\Li Peter\\Desktop\\Java\\01day\\1.png"); File file2 = new File("D:\\2.jpg"); //2.提供相应的流 FileInputStream fis = null; FileOutputStream fos = null; try { fis = new FileInputStream(file1); fos = new FileOutputStream(file2); //3.实现文件的复制 byte[] b = new byte[20]; //具体问题具体分析写数组值的大小 int len; while ((len = fis.read(b)) != -1) { // fos.write(b); //错误的写法两种: fos.write(b, 0, b.length); fos.write(b, 0, len); } } catch (IOException e) { e.printStackTrace(); } finally { if (fos != null) { try { fos.close(); } catch (IOException e) { e.printStackTrace(); } } if (fis != null) { try { fis.close(); } catch (IOException e) { e.printStackTrace(); } } } } //FileOutputStream @Test public void testFileOutputStream() { //创建一个File对象,表明要写入的文件位置。 //输出的物理文件可以不存在,当执行过程中,若不存在,会自动的创建。若存在,会将原有的文件覆盖 File file = new File("hello2.txt"); //2.创建一个FileOutputStream的对象,将file的对象作为形参传递给创建一个FileOutputStream的个构造器中 FileOutputStream fos = null; try { fos = new FileOutputStream(file); //3.写入的操作 fos.write("I love China!".getBytes()); } catch (IOException e) { e.printStackTrace(); } finally { //4.关闭输出流 if (fos != null) { try { fos.close(); } catch (IOException e) { e.printStackTrace(); } } } } }
byte[] b = new byte[x];
x数值的多少决定文件复制完成的速度,并不是说越大越好,看文件的大小进行判断,具体问题具体分析。