A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

i'm_fine_

初级黑马

  • 黑马币:4

  • 帖子:17

  • 精华:0

© i'm_fine_ 初级黑马   /  2013-10-26 22:48  /  1234 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

如何拷贝一个文件

7 个回复

倒序浏览

  1. import java.io.*;

  2. class CopyText
  3. {
  4.         public static void main(String[] args) throws IOException
  5.         {
  6.                 copy();
  7.         }


  8.         public static void copy()
  9.         {
  10.                 FileWriter fw = null;
  11.                 FileReader fr = null;
  12.                 try
  13.                 {
  14.                         fw = new FileWriter("SystemDemo_copy.txt");
  15.                         fr = new FileReader("SystemDemo.java");

  16.                         char[] buf = new char[1024];

  17.                         int len = 0;
  18.                         while((len=fr.read(buf))!=-1)
  19.                         {
  20.                                 fw.write(buf,0,len);
  21.                         }
  22.                 }
  23.                 catch (IOException e)
  24.                 {
  25.                         throw new RuntimeException("读写失败");

  26.                 }
  27.                 finally
  28.                 {
  29.                         if(fr!=null)
  30.                                 try
  31.                                 {
  32.                                         fr.close();
  33.                                 }
  34.                                 catch (IOException e)
  35.                                 {
  36.                                 }
  37.                         if(fw!=null)
  38.                                 try
  39.                                 {
  40.                                         fw.close();
  41.                                 }
  42.                                 catch (IOException e)
  43.                                 {
  44.                                 }
  45.                 }
  46.         }

  47.        


  48. }
复制代码
临时写的demo可以参考一下

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

回复 使用道具 举报
给你提供一个最简单的方法:
  1. import java.io.*;

  2. public class CopyMp3Demo {
  3.         public static void main(String[] args) throws Exception {
  4.                 FileOutputStream fos = new FileOutputStream("E:\\cancion_copy_3.mp3");
  5.                 FileInputStream fis = new FileInputStream("E:\\cancion.mp3");
  6.                
  7.                 InputStreamReader fisr = new InputStreamReader(fis);
  8.                 OutputStreamWriter fosw = new OutputStreamWriter(fos);
  9.                
  10.                 int ch = -1;
  11.                
  12.                 while ((ch = fisr.read()) != -1) {
  13.                         fosw.write(ch);
  14.                 }
  15.                
  16.                 BufferedInputStream bufr = new BufferedInputStream(fis);
  17.                 BufferedOutputStream bufw = new BufferedOutputStream(fos);
  18.                
  19.                 byte[] buf = new byte[1024];
  20.                 int num = 0;
  21.                
  22.                 while ((num = bufr.read(buf)) != -1) {
  23.                         bufw.write(buf, 0, num);
  24.                 }
  25.                
  26.                 bufr.close();
  27.                 bufw.close();

  28.         }
  29. }
复制代码
这里要拷贝一个字节流文件。先创建一对字节流文件输入和输出的对象,然后传递相应的路径和文件名,并创建两个缓冲区数据流对象,将这两个字节流对象传递给两个缓冲区数据流类的构造函数。然后使用两个缓冲区数据类的方法去实现读取和写入的方法就行了



评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

回复 使用道具 举报
BufferedReader bufr = new BufferedReader(new FileReader("g:\\filewriter.txt"));
                BufferedWriter bufw = new BufferedWriter(new FileWriter("d:\\copyfilewriter.txt"));
                String line = null;
                while((line = bufr.readLine())!=null)
                {
                        burw.write(line);
                        bufw.newLine();
                        bufw.flush();
                }
                bufr.close();
                bufw.close();
回复 使用道具 举报
  1. import java.io.BufferedInputStream;
  2. import java.io.BufferedOutputStream;
  3. import java.io.FileInputStream;
  4. import java.io.FileOutputStream;
  5. import java.io.IOException;

  6. public class FileCopy {
  7.         public static void main(String[] args){
  8.                 BufferedInputStream in = null;
  9.                 BufferedOutputStream out = null;
  10.                 try {
  11.                         in = new BufferedInputStream(
  12.                                         new FileInputStream("src/com/itheima/FileCopy.java"));
  13.                        
  14.                         out = new BufferedOutputStream(
  15.                                         new FileOutputStream("src/com/itheima/FileCopy.txt"));
  16.                        
  17.                         byte[] data = new byte[1024];
  18.                         while(true){
  19.                                 int len = in.read(data);
  20.                                 //out.flush();
  21.                                 if(len == -1)
  22.                                         break;
  23.                                 out.write(data, 0, len);
  24.                         }
  25.                        
  26.                 } catch (Exception e) {
  27.                         e.printStackTrace();
  28.                 }finally{
  29.                         try {
  30.                                 in.close();
  31.                                 out.close();
  32.                         } catch (IOException e) {
  33.                                 e.printStackTrace();
  34.                         }
  35.                 }
  36.         }
  37. }
复制代码
回复 使用道具 举报
  1. /*附上自己刚完成的题目,里面有些注释,不懂的可以给我留言*/

  2. import java.io.BufferedInputStream;
  3. import java.io.BufferedOutputStream;
  4. import java.io.File;
  5. import java.io.FileInputStream;
  6. import java.io.FileOutputStream;
  7. import java.io.IOException;
  8. import java.text.DecimalFormat;

  9. /**
  10. * 第七题:使用带缓冲功能的字节流复制文件。
  11. *
  12. * 思路:
  13. * 1、copyFile函数接收由调用者传递的两个参数(要复制的文件完整路径file和要复制到哪里的目录path)。
  14. * 2、创建file和path的实例对象,并进行一系列检测,避免复制后覆盖同名文件。并创建目标文件的完整路径。
  15. * 3、检测完毕后就创建输入流和输出流。为了提高效率,加入缓冲技术。
  16. * 4、(附加)显示一些格式化信息、记录程序执行时间等。
  17. * 5、因为是字节流,所以不能使用读一行的方法,只能一次读一个字节,效率低,如果文件不是很大,可以建立一个数组,把
  18. *    输入流中的数据全部读到数组中,在把数组中的数据一次性写入输出流,但如果数据太大,会出现内存溢出,所以进行文件
  19. *    大小的判断,小于等于200MB用新增数组的方法,大于200MB用一次读一个方法,这样可以尽量提高效率。
  20. * 6、复制完成,关闭资源
  21. *
  22. * @author 李志朋
  23. */
  24. public class Test7{
  25.         /**
  26.          * 复制文件
  27.          * @param file 需要复制文件的完整路径
  28.          * @param path 要复制到的目标目录
  29.          */
  30.         public static void copyFile(String file,String path){
  31.                 BufferedInputStream bis = null;
  32.                 BufferedOutputStream bos = null;
  33.                 try{
  34.                         File copyFile = new File(file);
  35.                         File savePath = new File(path);
  36.                        
  37.                         //如果要复制的文件不存在或者不是文件,发出提示并退出程序
  38.                         if (!(copyFile.exists() && copyFile.isFile())){
  39.                                 System.out.println("无效的文件,请检查");
  40.                                 System.exit(0);
  41.                         }
  42.                         //如果要保存到的目录不存在,则创建该目录
  43.                         if (!(savePath.isDirectory())){
  44.                                 System.out.println("你指定的目录不存在,将自动创建!");
  45.                                 savePath.mkdirs();
  46.                         }
  47.                        
  48.                         //创建目标文件完整路径。
  49.                         File saveFile = new File(savePath+"\\"+copyFile.getName());
  50.                         //如果saveFile是一个文件,说明有同名文件存在,则提示并退出程序,避免覆盖同名文件。
  51.                         if (saveFile.isFile()){
  52.                                 System.out.println("注意!该目录下有同名文件。");
  53.                                 System.exit(0);
  54.                         }

  55.                         //创建输入流和输出流。
  56.                         bis = new BufferedInputStream(new FileInputStream(copyFile));
  57.                         bos = new BufferedOutputStream(new FileOutputStream(saveFile));

  58.                         //获取输入流中的的字节数。
  59.                         long len = bis.available();
  60.                        
  61.                         //格式化显示文件大小,保留1位小数
  62.                         DecimalFormat df = new DecimalFormat(".0");
  63.                         String size = null;
  64.                         if(len > 1024*1024*200){
  65.                                 System.out.println("要复制的文件超过200MB,不能复制!");
  66.                         }else if(len > 1024*1024){
  67.                                 size = df.format(len/1024/1024) + " MB";
  68.                         }else if(len > 1024){
  69.                                 size = df.format(len/1024) + " KB";
  70.                         }else{
  71.                                 size = len + " 字节";
  72.                         }
  73.                         System.out.println("文件大小:" + size);
  74.                         System.out.println("复制中...");
  75.                        
  76.                         //记录复制开始时毫秒值
  77.                         long start = System.currentTimeMillis();
  78.                        
  79.                         //如果文件大于200MB,用一次读一个字节方式
  80.                         //否则就用数组一次性读取方式复制
  81.                         if(len > 1024*1024*200){
  82.                                 int by;
  83.                                 while((by=bis.read())!=-1){
  84.                                         bos.write(by);
  85.                                 }
  86.                         }else{
  87.                                 //创建数组缓冲区,指定大小为输入流中的的字节数len。
  88.                                 byte[] bytes = new byte[(int)len];               
  89.                                 bis.read(bytes);        //从输入流中读取所有数据存储到数组中。
  90.                                 bos.write(bytes);        //将数组中的所有数据写入的输出流缓冲区中。
  91.                         }
  92.                         //记录复制结束精辟时毫秒值
  93.                         long end = System.currentTimeMillis();
  94.                        
  95.                         System.out.println("复制完成");
  96.                         System.out.println("耗时:"+(end-start)+"毫秒");
  97.                 }
  98.                 catch(IOException e){
  99.                         throw new RuntimeException("复制文件失败");
  100.                 }
  101.                 //关闭流资源
  102.                 finally{
  103.                         try{
  104.                                 if (bis!=null){
  105.                                         bis.close();
  106.                                 }
  107.                         }
  108.                         catch(IOException e){
  109.                                 throw new RuntimeException("输出流关闭失败");
  110.                         }
  111.                         try{
  112.                                 if (bos!=null){
  113.                                         bos.close();
  114.                                 }
  115.                         }
  116.                         catch(IOException e){
  117.                                 throw new RuntimeException("输出流关闭失败");
  118.                         }
  119.                 }
  120.         }
  121.        
  122.         /**
  123.          * 测试
  124.          * @param args
  125.          */
  126.         public static void main(String[] args){
  127.                 //源文件
  128.                 //String copyFile = "E:\\abc.txt";
  129.                 String copyFile = "E:\\音乐\\MV\\第一部 T-ara - Day By Day.kux";
  130.                
  131.                 //指定目标路径,没有责创建
  132.                 String savePath = "F:\\abc";
  133.                
  134.                 copyFile(copyFile,savePath);
  135.     }
  136. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
To + 1 赞一个!

查看全部评分

回复 使用道具 举报
  1. /* 如果aa.txt文件为空,此时不能进行复制
  2. *字符流类型的文件复制
  3. * 先从简单的入手
  4. */
  5. import java.io.*;
  6. public class FileCopy1
  7. {
  8.    public static void main(String args[])
  9.    {
  10.          try
  11.          {
  12.       File f= new File("C:/aa.txt");
  13.       if(f.exists())
  14.       {
  15.                   FileReader fr  =  new FileReader(f);
  16.                   FileWriter fw = new FileWriter("C:/bb.txt");
  17.                   char []b= new char[1024];
  18.                   int len= fr.read(b);
  19.                   fw.write(b,0,len);
  20.                   fr.close();
  21.                   fw.close();
  22.                   System.out.println("文件复制成功!");
  23.            }
  24.            else
  25.             {System.out.println("文件不存在");}
  26.      }
  27.      catch(Exception e)
  28.      {System.out.println(e.getMessage());}
  29.    }
  30. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
周志龙 + 1 赞一个!

查看全部评分

回复 使用道具 举报
To 金牌黑马 2013-10-27 16:38:18
8#
楼主你好,如果问题已解决请将帖子状态修改为提问结束,
如果未解决请继续追问,谢谢合作
修改方法请看解释帖:http://bbs.itheima.com/thread-89313-1-1.html
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马