java字节流与字符流之文件复制

java采用两种I/O读写方式:一种是inputstream和outputstream字节流,一种是Reader和Writer字符流。字节流以字节为单位读取,字符流以字符为单位读取。

一、字节读取实现文件复制

//被复制文件"第一节课.txt",复制到1.txt文件
FileInputStream fis = new FileInputStream("第一节课.txt");
FileOutputStream fos = new FileOutputStream("1.txt");
//字节流
int read2;
while((read2 = fis.read()) != -1){
    fos.write(read2);
    //英文占一个,中文占两个
}
 //关闭   
fis.close();
fos.flush();
fos.close();

二、以字符读取实现文件复制

//被复制文件"第一节课.txt",复制到1.txt文件
FileReader fr = new FileReader("第一节课.txt");
FileWriter fw = new FileWriter("1.txt");
//字符流
int read1;
while((read1 = fr.read()) != -1){
     fw.write(read1);
     System.out.println((char)read1); //中英文都占两个字节
}
 //关闭   
fr.close();
fw.flush();
fw.close();

BufferedReader和BufferedWriter实现文件复制,可一行一行读取。

//被复制文件"第一节课.txt",复制到1.txt文件
FileReader fr = new FileReader("第一节课.txt");
FileWriter fw = new FileWriter("1.txt");

BufferedReader br = new BufferedReader(fr);
BufferedWriter bw = new BufferedWriter(fw);
String read;
while((read = br.readLine())!=null){
    bw.write(read);//写入1.txt
    bw.newLine();//换行
    System.out.println(read);
}

三、通过byte数组读取文件

FileInputStream fis = new FileInputStream("第一节课.txt");
//byte数组读取
byte[] bs = new byte[fis.available()];//available()流中可读取数据大小
int read = fis.read(bs);
System.out.println(new String(bs));
//关闭
fis.close();    

对byte[]数组采用toString的方法转化为字符,会导致错误的分割方式生成字符,不能正确地显示字符;而采用String的构造函数String(byte[] b)可以正确的分割构造字符。(或者String(byte[] b, Charset a)带编码方式的构造函数,在知道要读入的文本的编码方式的情况下。)

四、创建文件输出流

java中建立文件输出流,当文件不存在时会新建一个文件,如果有同名文件,自动覆盖。不存在时自动建立。FileOutputStream的默认构造方法是直接覆盖掉原来的文件,而FileOutputStream(File file, boolean append) 的构造方法如果后面的append为true时追加到尾部而不是直接覆盖了。

FileReader fr = new FileReader("第一节课.txt");
FileWriter fw = new FileWriter("1.txt",true);
//字符流
int read1;
while((read1 = fr.read()) != -1){
    fw.write(read1);
    System.out.println((char)read1); //中英文都占两个字节
}

fr.close();
fw.flush();
fw.close();

追加到尾部

当创建IO对象是,文件是以独占的方式打开,就好比windows打开文件时进行删除,是无法删除的。创建文件未写入信息,是因为缺少 output.flash() 这句,将缓存内容写入文件。通常在做文件操作,要先判断文件是否存在,最后再写入操作。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值