当前位置: 移动技术网 > IT编程>开发语言>Java > 实例讲述Java IO文件复制

实例讲述Java IO文件复制

2019年07月19日  | 移动技术网IT编程  | 我要评论
前言:io流主要分为两大类,分别是字节流与字符流 注意: 1、音频文件、图片、视频(范围广),就用字节流 2、只涉及到文本的,就用字符流 使用字节流复制文本内容(其

前言:io流主要分为两大类,分别是字节流与字符流

注意:

1、音频文件、图片、视频(范围广),就用字节流

2、只涉及到文本的,就用字符流

使用字节流复制文本内容(其他文件也可以)

代码如下:

import java.io.file;
import java.io.fileinputstream;
import java.io.filenotfoundexception;
import java.io.fileoutputstream;
import java.io.ioexception;
import java.io.inputstream;
import java.io.outputstream;

public class copyfile {
  public static void main(string[] args) {
    try{
      file infile=new file("src.txt"); //源文件
      inputstream in=new fileinputstream(infile); //文件输入流
      
      file outfile=new file("tar.txt"); //目标文件
      outputstream out=new fileoutputstream(outfile); //文件输出流
      byte[] buff=new byte[1024]; //创建缓冲区,分配1024个字节大小的内存给buff
      int num=0;
      while((num=in.read(buff))!=-1){ //判断每次读取的最大字节数是否为1024
        out.write(buff,0,num);
//        out.write(buff); //这样也可以,不过容易造成文件内容不正确
        out.flush(); //刷新缓冲区
        string s=new string(buff);
        system.out.println("文件内容复制成功");
        system.out.println("文件复制内容为\n"+s);
      }
      in.close(); //关闭输入流
      out.close(); //关闭输出流
//      infile.delete(); //删除源文件
//      outfile.renameto(new file("rename.txt")); //输出文件重命名
    }
    catch(filenotfoundexception e){
      e.printstacktrace(); //在命令行打印异常信息在程序中出错的位置及原因
    }
    catch(ioexception e){
      e.printstacktrace();
    }
  }
}

使用字符流复制文本内容(仅限文本文件)

代码如下:

import java.io.bufferedreader;
import java.io.bufferedwriter;
import java.io.file;
import java.io.filenotfoundexception;
import java.io.filereader;
import java.io.filewriter;
import java.io.ioexception;

public class copyfile{
  public static void main(string[] args) {
    try{
      file infile=new file("d:/src.txt"); //源文件
      filereader filereader=new filereader(infile); //读取文件字符流
      bufferedreader bufferedreader=new bufferedreader(filereader); //把读取到的字符流放入缓存
      
      file outfile=new file("d:/tar.txt"); //目标文件
      filewriter filewrite=new filewriter(outfile); //写入字符流
      bufferedwriter bufferedwriter=new bufferedwriter(filewrite); //把要输入的字符流放入缓存
      string s="";
      string str = "";
      while((s=bufferedreader.readline())!=null){ //判断文件字符流是否读取完毕
        bufferedwriter.write(s); //字符流缓存写入文件
        bufferedwriter.newline(); //按行读取,遇到换行符则换行
        bufferedwriter.flush(); //刷新缓存
        str+=s;
      }
      system.out.println("文件复制内容为\n"+str);
      //关闭输入输出流
      filereader.close();bufferedreader.close();
      filewrite.close();bufferedwriter.close();
//      infile.delete(); //删除源文件
//      outfile.renameto(new file("rename.txt")); //输出文件重命名
    }
    catch(filenotfoundexception e){
      e.printstacktrace(); //在命令行打印异常信息在程序中出错的位置及原因
    }
    catch(ioexception e){
      e.printstacktrace();
    }
  }
}

说明:

如果想以追加文件内容,而不是覆盖的方式来复制文本内容,则修改如下

outputstream out=new fileoutputstream(outfile,true); //字节流
filewriter filewrite=new filewriter(outfile,true); //字符流

如果要在字符流指定缓存区大小,则修改如下

bufferedwriter bufferedwriter=new bufferedwriter(filewrite,1024);

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网