[java IO流]之文件拷贝

文件拷贝

使用字节流实现文件拷贝

通过这里我们需要了解计算机是如何处理中文的?

首先读取一个字节,如果认为没有转换,那么系统是根据当前的编码表来处理中文【中文的第一个数一般是负数】。当读取字节时,如果是整数,直接转换成对应码表的字符;如果是负数,判断编码表,假设是GBK还会等待下一个字节一起转换成对应的字符,如果是UTF-8,就会等待下两个字节一起转换成对应的字符。

文件拷贝方式:

1.单个字节来拷贝

步骤:

1.创建输出流对象

2.创建输入流对象

3.定义一个字节,用来当做中间量

4.循环读取,写入

5.关闭流

FileInputStream  fis=new FileInputStream(new File("E:\\File\\1.txt"));//创建输入流

  FileOutputStream fos=new FileOutputStream(new File("E:\\File\\copy.txt"));//创建输出流

  //读取

  int b;

  while ((b=fis.read())!=-1) {//读取单个字节,并作出判断

      fos.write(b);//写入单个字节

      fos.flush();

  }

  fos.close();//关闭流

  fis.close();//关闭流
2.字符数组来拷贝

步骤:

1.创建输出流对象

2.创建输入流对象

3.创建字节数组

4.用字节数组获取,并且获取长度(长度用来判断,且用来控制写入字节数组的长度)

5.从字节数组中写入文件(如果不用长度来控制的话,最后一次字节数组用不完,会将字节数组中默认的值写入)

6.关闭流

public static void main(String[] args) throws IOException {

  FileOutputStream fos=new FileOutputStream(new File("E:\\File\\copy.txt"));//创建输出流

  FileInputStream fis=new FileInputStream(new File("E:\\File\\1.txt"));//创建输入流

  //读取输入流

  System.out.println(fis.available());//为了测试最初的有效字节数

  byte[] b=new byte[1024];

  int len = 0;  

  while((len = fis.read(b))!=-1) {  //获取长度来判断

      fos.write(b,0,len);  //一定要用长度来控制写入的字节数组

      fos.flush();

  }

  System.out.println(fis.available());//测试复制过后的有效字节数

  fos.close();//关闭输入流

  fis.close();//关闭输出流

  }
本作品采用《CC 协议》,转载必须注明作者和本文链接
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!