黑马程序员技术交流社区
标题:
复制文件的原理和代码。
[打印本页]
作者:
何小红
时间:
2012-9-13 07:16
标题:
复制文件的原理和代码。
没有思路,请各位指点一二
作者:
牛杨
时间:
2012-9-13 10:27
在计算机中不论复制什么文件
原理就是 把源文件中的数据先读到内存中,然后再从内存中把这些数据写到目标文件中。
至于代码,毕老师关于IO流里面的讲解的都有,也有代码示例。 学到了自然就知道了
作者:
任艳旭
时间:
2012-9-13 12:12
这是复制文件夹,通过键盘接收,它的原理是利用递归。
首先创建一个文件夹,然后遍历里面的每个文件对象,判断如果是文件,那么就用字节流或者字符流,拷贝文件,然后如果是文件夹,就利用递归。具体看下面的代码,如果不明白,我再详细的说明!
public class Exercise6 {
public static void main(String[] args) throws IOException {
File src = DirUtil.getDir(); // 从键盘接收一个文件夹路径
File dest = DirUtil.getDir(); // 从键盘接收另一个文件夹路径
copyDir(src, dest); // 将第一个文件夹中的内容拷贝到第二个文件夹中
}
/*
* src: F:\Itcast\WorkSpace\day21-8
* dest: F:\
* newDir: F:\day21-8
*
* 把day21-8整个文件夹复制到F:\下
*/
private static void copyDir(File src, File dest) throws IOException {
File newDir = new File(dest, src.getName()); // 在dest中创建一个和src同名的文件夹
newDir.mkdir();
File[] fileArr = src.listFiles(); // 获取src中的所有子文件
for (File subfile : fileArr) { // 循环遍历子文件
if (subfile.isFile()) { // 如果是文件, 直接拷贝
FileInputStream fis = new FileInputStream(subfile);
FileOutputStream fos = new FileOutputStream(new File(newDir, subfile.getName()));
byte[] buffer = new byte[1024];
int len;
while ((len = fis.read(buffer)) != -1)
fos.write(buffer, 0, len);
fis.close();
fos.close();
} else { // 如果是文件夹, 递归
copyDir(subfile, newDir);
}
}
}
}
public class DirUtil {
public static File getDir() throws IOException {
System.out.println("请输入一个文件夹路径:");
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
while (true) {
File dir = new File(br.readLine());
if (!dir.exists())
System.out.println("路径不存在, 请重新输入:");
else if (!dir.isDirectory())
System.out.println("您输入的不是文件夹路径, 请重新输入:");
else
return dir;
}
}
}
作者:
张飞年
时间:
2012-9-13 13:17
复制文件的原理其实很简单,就是java的读取流读入内存,然后由输出流输出到指定的路径位置。如果是文本文件,通常使用字符流来完成,其他文件因为不需要编码就直接使用字节流来完成,这里给段复制图片的代码,好好看看注释:
public class TestCopy1 {
/*
* 将一个图片从一个地方复制到另一个地方 需求分析: 源:硬盘,输入流 InputStream Reader 目的:文件 输出流
* OutputStream Writer 明确:操作的不是纯文本 那就用InputStream 输出用OutputStream
* 具体使用的对象:通过设备来区分 源设备:硬盘 目标源:硬盘 是否提高效率:是
* 那么使用BufferedInputStream与BufferedOutputStream
*/
public static void main(String[] args) throws IOException {
BufferedInputStream bufin = new BufferedInputStream(//定义字节缓冲
new FileInputStream("d:\\222.jpg"));
BufferedOutputStream bufout = new BufferedOutputStream(
new FileOutputStream("d:\\446.jpg"));//定义字节缓冲输出
byte[] by = new byte[bufin.available()];//定义长度为对象字节长度的数组
int len = 0;//计数,读入数组的字节长度
if((len = bufin.read(by)) != -1) {//一次全读进数组,这里用if条件,因为一次就可以全读取完,不然就用while
bufout.write(by,0,len);//这里一次性输出相应长度的数组内容,如果数组内容是1024的大小,那么就用while来多次取多次输出
bufout.flush();//刷新保存
}
bufout.close();//关闭流
bufin.close();
}
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2