首页 > 编程 > Java > 正文

实例讲述Java IO文件复制

2019-11-26 10:13:49
字体:
来源:转载
供稿:网友

前言: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);

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表