java文件的拷贝
在工程下的src里面创建好一个文本文件(datas.txt)
我这里也是拷贝到工程下的src下
两个文本的扩展名要相同才能进行拷贝文件
一
import java.io.*; //文件的拷贝 public class CopyDemo03 { public static void main(String[] args) { //进行文件的拷贝 try { //定义一个源文件 InputStream InputStream in = new FileInputStream("chapter07/src/datas.txt");//多态写法 文件放在工程下的src里面 //定义一个拷贝到的文件名 文件名夜要进行定义 OutputStream out = new FileOutputStream("chapter07/src/data01.txt"); //定义 一个字节数组 byte[] buffer = new byte[1024];//1KB //定义一个字节读取 的记录数 int len; while ((len = in.read(buffer)) != -1) { out.write(buffer,0,len);//buffer相当于临时存储器 从0开始 到文件存储的长度(大小) } //最后要记得关闭流 不让会占用CPU内存 in.close(); out.close(); } catch (Exception e) { e.printStackTrace(); } } }
二
import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.InputStream; import java.io.OutputStream; public class FileDemo03 { public static void main(String[] args) throws Exception { // 创建一个字节输入流,用于读取当前目录下source文件夹中的mp3文件 InputStream in = new FileInputStream("F:\\java\\Filetest\\javaSE\\hello.txt"); // 创建一个文件字节输出流,用于将读取的数据写入当前目录的target文件中 //拷贝到指定的文件下 OutputStream out = new FileOutputStream("F:\\java\\Filetest\\test\\hello.txt"); // 以下是用缓冲区读写文件 // 定义一个字节数组,作为缓冲区 1KB byte[] buff = new byte[1024]; // 定义一个int类型的变量len记住读取读入缓冲区的字节数 int len; long begintime = System.currentTimeMillis(); while ((len = in.read(buff)) != -1) { // 判断是否读到文件末尾 // 字节数组 0 大小 out.write(buff, 0, len); // 从第一个字节开始,向文件写入len个字节 } long endtime = System.currentTimeMillis(); System.out.println("拷贝文件所消耗的时间是:" + (endtime - begintime) + "毫秒"); //关闭流 in.close(); out.close(); } }
将一中 的代码进行优化
- 使用try - catch -finally 释放资源
import java.io.*; public class CopyDemo03 { public static void main(String[] args) { InputStream in = null; OutputStream out = null; //进行文件的拷贝 try { //定义一个源文件 InputStream in = new FileInputStream("chapter07/src/datas.txt");//多态写法 //定义一个拷贝到的文件名 文件名夜要进行定义 out = new FileOutputStream("chapter07/src/data01.txt"); //定义 一个字节数组 byte[] buffer = new byte[1024];//1KB //定义一个字节读取 的记录数 int len; while ((len = in.read(buffer)) != -1) { out.write(buffer, 0, len);//buffer相当于临时存储器 从0开始 到文件存储的长度(大小) } } catch (Exception e) { e.printStackTrace(); } finally { //finally依然会执行下去 把关闭流放在finally //最后要记得关闭流 不让会占用CPU内存 try { in.close(); } catch (Exception e) { e.printStackTrace(); } try { out.close(); } catch (Exception e) { e.printStackTrace(); } } } }
- 使用try(定义流对象){ 可能出现的异常 }catch (异常类名 变量名 ) { 异常处理}
import java.io.*; public class CopyDemo03_1 { public static void main(String[] args) { //进行文件的拷贝 try ( //这里只能放资源 (资源都是实现了Closeable/AutoCloseable接口的类对象) //用完会自动关闭流 自动调用资源对象的close方法关闭资源 //定义一个源文件 InputStream InputStream in = new FileInputStream("chapter07/src/datas.txt");//多态写法 //定义一个拷贝到的文件名 文件名夜要进行定义 OutputStream out = new FileOutputStream("chapter07/src/data01.txt"); ) { //定义 一个字节数组 byte[] buffer = new byte[1024];//1KB //定义一个字节读取 的记录数 int len; while ((len = in.read(buffer)) != -1) { out.write(buffer, 0, len);//buffer相当于临时存储器 从0开始 到文件存储的长度(大小) } } catch (Exception e) { e.printStackTrace(); } } }