散分60分,求教java 复制文件夹及其中文件,复制后文件的相对路径保持不变,请高手帮忙!在线等。。。

交个朋友好不好 2010-03-17 12:58:34
我现在得到了文件的绝对路径如“E:/workspace/efms/src/com/unis/file/directory/DirectoryAction.java”,我想把该目录中的相对路径“src/com/unis/file/directory/DirectoryAction.java”复制到绝对路径“E:\backUp”下,即变成了“E:/backUp/src/com/unis/file/directory/DirectoryAction.java”
现在是有源路径:String sourcePath = "E:/workspace/efms/src/com/unis/file/directory/DirectoryAction.java";
目标路径:String targetPath = “E:/backUp/src/com/unis/file/directory/DirectoryAction.java”
不知道怎样通过传这两个参数把文件夹和文件同时拷贝过去。
请高手指教!

...全文
236 8 打赏 收藏 转发到动态 举报
写回复
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
bbb332 2010-03-17
  • 打赏
  • 举报
回复
file类。。。。。。。。。
zuoguodang 2010-03-17
  • 打赏
  • 举报
回复
直接用流读不就行了,先遍历这个目录一个文件一个文件复制
xiesisi3 2010-03-17
  • 打赏
  • 举报
回复
Runtime.getRuntime().exec("COPY " + sourcePath + " " + targetPath);
就可以了。
sing4j 2010-03-17
  • 打赏
  • 举报
回复
看到你的问题,我随便写了一下。当中存在许多不足,但是你需要的功能可以实现。
你自己按照思路,修改这个代码就可以了。

public static void main(String[] args) throws IOException {
File srcFile = new File("F:\\test\\test.java");//你需要copy的文件
String relativePath = "\\test\\";//你需要指定相对路径是什么
InputStream is = new FileInputStream(srcFile);//读取文件
String tarPath = "E:\\bak" + relativePath;//E:\\bak是你要考的路径,后面的是你所说的相对路径
File tarF = new File(tarPath);//
tarF.mkdirs();//创建文件夹
File tarFile = new File(tarPath + srcFile.getName());//
tarFile.createNewFile();//创建文件
OutputStream os = new FileOutputStream(tarFile);//输出
int i;
byte[] b = new byte[255];
while ((i = is.read(b)) != -1) {
os.write(b);
}
is.close();
os.flush();
os.close();
}
xiaoboalex 2010-03-17
  • 打赏
  • 举报
回复
import   java.io.*;

public class CopyFiles {
public static void Copy(String src, String dst) {
File srcFile = new File(src);
File dstFile = new File(dst);
if (!srcFile.exists() || srcFile.isFile()) return;
if (!dstFile.exists() && !dstFile.mkdirs()) return;
File srcChilds[] = srcFile.listFiles();
for (int i=0; i<srcChilds.length; ++i) {
// Generate source and destination path
String srcpath = srcChilds[i].getAbsolutePath();
String dstpath = dstFile.getAbsolutePath() + srcpath.substring(srcFile.getAbsolutePath().length());
if (srcChilds[i].isFile()) {
// Copy file to destination
FileInputStream in = null;
FileOutputStream out = null;
byte buffer[] = new byte[8192];
int bytesRead;
try {
in = new FileInputStream(srcpath);
out = new FileOutputStream(dstpath);
while ((bytesRead = in.read(buffer)) != -1) {
out.write(buffer, 0, bytesRead);
}
} catch (Exception e) {}
if (null != in) try { in.close(); } catch (Exception e) {}
if (null != out) try { out.close(); } catch (Exception e) {}
} else {
// Recursion for directory
Copy(srcpath, dstpath);
}
}
}

public static void main(String[] args) {
if (args.length != 2)
System.err.println("Wrong parameters. Correct usage: java CopyFiles <srcDir> <dstDir>");
else {
Copy(args[0], args[1]);
}
}
}


保存成CopyFiles.java,先用javac编译,然后再调用,例如:java CopyFiles d:\temp d:\newtemp
  • 打赏
  • 举报
回复
1楼的代码,不知道怎么用呀,谁能不能给个简单点的?
  • 打赏
  • 举报
回复
技术分是7分,可用分207分,呵呵
musiclee 2010-03-17
  • 打赏
  • 举报
回复
你一共有7分 怎么散60分?

public static void getAllFile(String rootpath, String filepath,
ArrayList<String> flist, boolean isconsubdir) {
// 获得某个目录下的所有文件列表(可以包括子目录)
String ffullpath = rootpath + File.separator + filepath;
File file = new File(ffullpath);

if (file.exists() && file.isDirectory()) {
String[] fileStr = file.list();
for (int i = 0; i < fileStr.length; i++) {
if (new File(ffullpath + File.separator + fileStr[i])
.isDirectory()) {
if (isconsubdir) {
// 是否包含子目录文件
flist.add("#");// 纪录以下是是目录
flist.add(filepath + File.separator + fileStr[i]);
getAllFile(rootpath, filepath + File.separator
+ fileStr[i], flist, isconsubdir);
}
} else {

flist.add(filepath + File.separator + fileStr[i]);
System.out.println(filepath + File.separator + fileStr[i]);
}
}

}
}




//调用此方法 复制文件函数


public void creatFile(String oldPath, String newPath,String type) {

String temp;
int dirnum = 0;
ArrayList<String> flist = new ArrayList<String>();
ReadFileandDir.getAllFile(oldPath, "", flist, true);//得到某个目录下的全部文件和文件夹
while (flist.size() != 0) {
temp = flist.get(0);
// if (temp.endsWith(type))
// System.out.println(temp);
if (temp.startsWith("#")) {
dirnum++;
} else {
if (dirnum > 0) {
//System.out.println("below is dir");
new File(newPath + temp).mkdir();
dirnum--;
} else {
// 如果是文件则dosometing
if (temp.endsWith(type))
BmpToBit(oldPath + temp);
//BMPReverse(oldPath + temp, newPath + temp);
}
}
flist.remove(0);
}
}





public static void main(String[] arg) {
ReadBMP readBMP = new ReadBMP();
String oldPath = "D:/oldbimp";
String newPath = "d:/bimp";
//readBMP.creatFile(oldPath, newPath,".bmp");
readBMP.BmpToBit("D://11.bmp");
// readBMP.ReadFile("D:\\oldbimp\\Bliss11.bmp","d:\\bimp\\1.txt");

}
相关推荐
1.linux系统介绍 以windows为内核的操作系统有哪些:win10   win8   win7  xp  系统    windows server 以linux为内核的操作系统有哪些:centos  ubuntu  debian   windows和linux  linux:服务器   安全    稳定 高效    windows:办公  家用  2.安装linux注意事项 对centos系统 的基本使用   有哪些文件   对文件/文件 进行操作  创建 删除  修改 移动 复制   写入 home 存放所有用户文件的根目录  soft :安装软件 cd  ll mkdir 创建文件  touch 空文件  echo sdsd>a.txt       vi a.txt vi c.txt  打开文件  按下i键  改为写入的模式    写完之后保存: 先按下esc 按键再按下:w 保存 :q退出  :wq    写完之后不想保存 强制退出  esc  :q! 删除文件/文件 rm -rf a.txt  b.txt rm -rf soft 复制 如果复制文件 cp  要复制文件名   复制出来的文件名子    cp  a.txt   a1.txt 如果复制的是文件的 cp -r soft/   soft1 展示一个文件的内容 cat  移动文件  mv  temp1   temp2 重命名 mv  temp1   temp2 查找: find /(查找的路径)  -name   *.txt    b 清屏  clear tab 按键 可以帮助我们把输入的内容补全   3.配置局域网  需要通过ssh软件远程操作linux系统 远程操作centos系统  在windows操作系统通过一款软件来远程操作虚拟电脑的centos系统  ssh软件: xshell  secureCRT 第一步在win10系统下载并且安装ssh软件 secureCRT    第二步:只要知道centos系统所在电脑的公网IP  登录账户和密码      /  win10和centos系统所在的两台电脑在同一个局域网内  局域网IP  登录账户和密码 第三步:centos系统 进行局域网的设置 往网卡写入一些数据   win10写入的方式:桌面的化操作和centos系统写入的方式是不一样的  ip 网关 子网掩码 NM_conteolle。。。 命令  找到往网卡写入数据的文件    重新启动网络服务 开启22端口   重启防火墙服务 网络桥接网络  *************************端口是否开启  4.配置外网  下载软件1.下载并且安装到系统 node.js环境   npm install bootstrap   默认的镜像库 centos系统    yum install  服务名     默认的镜像库  2.自己下载服务  wget 服务的网络地址 自己单独安装  比较灵活 安装难度大 windows系统  exe文件 linux       rpm包

62,567

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告