日期:2014-05-20  浏览次数:20777 次

文件Copy问题,求bug原因
package io_rehearsal;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

/*
 * 
 *写一个文件copy方法: 
 *如果copy的对象是文件,则copy src文件到目标dest文件; 
 *如果copy的对象是目录,则copy src目录下的所有文件和文件夹(包括子文件夹)到dest目录下。
 */
public class MyCopy
{

public static void main(String[] args)
{
try
{
copy("F:/text","E:/java常用文件");

} catch (IOException e)
{
e.printStackTrace();
}

}
//st1为读路径,str2为写路径
public static void copy(String str1,String str2) throws IOException
{
try
{
File f1 = new File(str1);
File f2 = new File(str2);
FileInputStream fis = new FileInputStream(f1);
FileOutputStream fos = new FileOutputStream(f2);
if(f1.exists())
{
//判断是否是文件
if(f1.isDirectory())
{
//把该目录下的文件用一个File接受,然后再用递归方法重新判断
File[] arr = f1.listFiles();
if(arr != null){
for (File file2 : arr)
{
//返回路径
copy(file2.getName(),str1+File.separator+file2.getName());
}
}

}
//判断是否文件
else if(f1.isFile())
{
//进行文件读写操作
byte[] buffer = new byte[1024*2];
int len  = 0;
while((len = fis.read(buffer))!= -1)
{
fos.write(buffer, 0, len);
}
}
}

} catch (FileNotFoundException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}

}

------解决方案--------------------
这个明显是没有找到这个目录哈,看看源目录是否存在
------解决方案--------------------
另外copy函数体中递归的第二个参数写错了
------解决方案--------------------
引用:
java.io.FileNotFoundException: F:\text (拒绝访问。)
at java.io.FileInputStream.open(Native Method)
at java.io.FileInputStream.<init>(Unknown Source)
at io_rehearsal.MyCopy.copy(MyCopy.java:……

FileInputStream是要求必须读取到文件信息,不可以是文件夹

If the named file does not exist, is a directory rather than a regular file, or for some other reason cannot be opened for reading then a FileNotFoundException is thrown.

楼主应该在确定的文件上建立文件输入流


------解决方案--------------------
另外copy函数体中递归的第一个参数不能是文件名,应该是文件路径
------解决方案--------------------
/*
 * 
 *写一个文件copy方法: 
 *如果copy的对象是文件,则copy src文件到目标dest文件; 
 *如果copy的对象是目录,则copy src目录下的所有文件和文件夹(包括子文件夹)到dest目录下。
 */
public class MyCopy {

public static void main(String[] args) {
try {
copy("D:\\test1", "D:\\test2");

} catch (IOException e) {