嘿牛程序员__成都传智博客__文件的拷贝:单个文件的拷贝(上)

---------------------- android培训java培训、期待与您交流! ----------------------

微笑本节开始研究文件的拷贝
文件的拷贝,要分为单个文件的拷贝和整个文件夹的拷贝。本节主要研究单个文件的拷贝。
实现方式分别为通过字节输入输出流和字符输入输出流,下面是具体实现:

/**
 *实现一
 *从字节输入输出流中读取文件
 *
 **/
/*
import java.io.*;
public class MyCopy
{
    public static void main(String args[])
    {
      try
       {
        MyCopy j = new MyCopy();
        //String args[]  表示一个字符串数组,这个通常是用来传递参数的.如:String args[] = {"12", "abc"};args[0]="12",args[1]="abc"
        j.CopyFile(new File(args[0]),new File(args[1]));
        }
      catch (Exception e)
       {
        e.printStackTrace();
       
        }
     }

    public void CopyFile(File in, File out) throws Exception
      {
      FileInputStream fis  = new FileInputStream(in);
      FileOutputStream fos = new FileOutputStream(out);
      byte[] buf = new byte[1024];
      int i = 0;
      //i=fis.read(buf) 用来求原文档文本的长度
      //public final int read(byte[] b) throws IOException 从包含的输入流中读取一定数量的字节,并将它们存储到缓冲区数组 b 中。以整数形式返回实际读取的字节数。
      //在输入数据可用、检测到文件末尾 (end of file) 或抛出异常之前,此方法将一直阻塞。
      //读入缓冲区的字节总数;如果因为已经到达流末尾而没有更多的数据,则返回 -1。
      while((i=fis.read(buf))!=-1)
        {
        //用来写入到目标文档 
        fos.write(buf, 0, i);
        }
      fis.close();
      fos.close();
      }
}*/
     
  /**
   *  程序运行时的命令语法为:
   *javac MyCopy.java (sourcefile) (destfile)
   *java MyCopy.java d:\1.txt e:\1.txt
   *当然前提c盘1.txt  已存在。
   **/

/**
 *实现二
 *从字符输入输出流中读取文件,并借助于字符缓冲区
 *
 **/
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;


public class MyCopy
 {
       
        public static void copyFile(String str1, String str2)
        {
                File file1 = new File(str1);//源文件
                File file2 = new File(str2);//目标文件
                try
                {
                        //第一种方法,从字符输入流中读取文本,缓冲各个字符,从而实现字符、数组和行的高效读取。
                        FileReader reader = new FileReader(file1);
                        BufferedReader br = new BufferedReader(reader);//准备从源文件度数据
                       
                        FileWriter writer = new FileWriter(file2);
                        PrintWriter print = new PrintWriter(writer);//准备向目标文件中写文件
                       
                        String temp = br.readLine();
                        //while(br.readLine()!= null)//只能复制第一行???
                        while(temp!= null)
                        {       //读取和写入文件
                                print.println(temp);
                                //读取文本文件的一行,每执行一次,文件读取指针自动移到下一行,再执行时,读取的就是下一行的内容
                                temp=br.readLine();
                        }
                        print.flush();
                        br.close();//关闭输入流
                        print.close();//关闭输出流
                       
                       
                        //第二种方法,没有借用缓冲区。
                        //采用与实现一相似的办法。区别在于实现一用的是字节: byte[] buf = new byte[1024];,此方法用的是字符:char[] buf = new char[1024];
                        /*FileReader re = new FileReader(file1);
                        FileWriter wr = new FileWriter(file2);
                        char[] buf = new char[1024];
                        int i = 0;
                           //i=re.read(buf) 用来求原文档文本的长度
                           //public int read(char[] cbuf) throws IOException 将字符读入数组。在某个输入可用、发生 I/O 错误或者已到达流的末尾前,此方法一直阻塞。
                           //读取的字符数,如果已到达流的末尾,则返回 -1
                        while((i=re.read(buf))!=-1)
                         {
                          //用来写入到目标文档 
                          wr.write(buf, 0, i);
                         }
                         re.close();
                         wr.close();
                         */
                        
                        
                }
                catch (FileNotFoundException e)
                {
                        e.printStackTrace();
                }
                catch (IOException e)
                {
                        e.printStackTrace();
                }//处理异常
        }

        public static void main(String[] args)
        {
                if(args.length<2)
                {
                        System.out.println("参数不够,请输入两个参数");
                }
                else if(args.length >2)
                {
                        System.out.println("参数太多,请输入两个参数");
                }else
                {
                        copyFile(args[0], args[1]);//测试
                }
        }

 再见

---------------------- android培训java培训、期待与您交流! ----------------------详细请查看:http://edu.csdn.net/heima

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值