[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 协议》,转载必须注明作者和本文链接