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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王婷婷 中级黑马   /  2013-4-17 17:30  /  1855 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

刚做了一个copy文件的习题,开始复制的是相同路径下不同名的文件,复制成功。
当复制同名文件时没有成功,再改成刚开始的代码,原文件也没数据了。
怎么 办?


评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

7 个回复

倒序浏览
忘记设置读写状态了,是创建文件还是更新文件。。。否则会发生覆盖,一覆盖就出现你那种情况了,我奇怪的是你为甚么会想到复制同名文件,一山不容二虎啊。。。

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
  1. public class CopyFile {
  2.         static int count = 1;

  3.         public static void main(String[] args) {
  4.                 // src源地址路径,desc目标地址路径
  5.                 String src = "D:\\a.txt";
  6.                 String desc = "D:\\a.txt";
  7.                 copyFile(new File(src), new File(desc));
  8.         }

  9.         /**
  10.          * 复制源文件到目标文件的方法
  11.          *
  12.          * @param src
  13.          * @param desc
  14.          */
  15.         private static void copyFile(File srcFile, File descFile) {
  16.                 // 检测文件路径是否相同,如果相同,就将目标文件名前加上复件和数字
  17.                 if (srcFile.equals(descFile)) {
  18.                         descFile = new File(descFile.getParentFile() + File.separator
  19.                                         + "复件 " + count++ + srcFile.getName());
  20.                 }

  21.                 try {

  22.                         BufferedInputStream bis = new BufferedInputStream(
  23.                                         new FileInputStream(srcFile));
  24.                         // 或者也可以简单的让新文件内容加在源文件之后,需要如下语句:
  25.                         // BufferedOutputStream bos = new BufferedOutputStream(
  26.                         // new FileOutputStream(descFile,true));
  27.                         BufferedOutputStream bos = new BufferedOutputStream(
  28.                                         new FileOutputStream(descFile));
  29.                         byte[] buf = new byte[1024];
  30.                         int len = 0;
  31.                         while ((len = bis.read(buf)) != -1) {
  32.                                 bos.write(buf, 0, len);
  33.                                 bos.flush();
  34.                         }
  35.                         bos.close();
  36.                         bis.close();

  37.                 } catch (FileNotFoundException e) {
  38.                         System.out.println("找不到源文件");
  39.                 } catch (IOException e) {
  40.                         System.out.println("写入出错");
  41.                 }
  42.         }
  43. }
复制代码
简单写了一个代码,只是多了个检测把文件名改了下。希望能帮到你

评分

参与人数 1技术分 +2 收起 理由
陈丽莉 + 2

查看全部评分

回复 使用道具 举报
Miss小强 发表于 2013-4-17 19:46
忘记设置读写状态了,是创建文件还是更新文件。。。否则会发生覆盖,一覆盖就出现你那种情况了,我奇怪的是 ...

嘿,看的字符流缓冲区的视频,试了试,想到同名时该怎么处理
回复 使用道具 举报
PANZERLEADER 发表于 2013-4-17 20:36
简单写了一个代码,只是多了个检测把文件名改了下。希望能帮到你

呃,还要检测呀,是不是毕老师的视频后面讲到了?
不过,貌似看懂了点
回复 使用道具 举报
PANZERLEADER 发表于 2013-4-17 20:36
简单写了一个代码,只是多了个检测把文件名改了下。希望能帮到你

还得继续看--------------
回复 使用道具 举报
王婷婷 发表于 2013-4-17 20:47
呃,还要检测呀,是不是毕老师的视频后面讲到了?
不过,貌似看懂了点

好像没讲,记不太清了。

不过解决方法就像2楼说的那样,写到同名文件后面也行,只要加一个boolean型参数在构造方法里。

也可以向我的代码那样检测下,写到新文件里。
回复 使用道具 举报
当然是 设置读写状态的问题了。  字符流的方法嘛!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马