由于文件复制到文件和文件复制到文件夹的代码具有重复性,所以两者方法可结合在一起。
分析:
1,复制到文件夹代码多了一层判断:
f(!targetFile.exists())
targetFile.mkdirs();
2,当targetFile为文件时,targetFile.mkdirs();语句会把形如**.txt文件也建立成文件夹形式
3,复制到文件夹时,需要改变targetFile的值即:targetFile=new File(targetFile.getAbsolutePath()+"\\"+sourceFile.getName());
结论:添加判断语if(!targetFile.isFile())
else targetFile.mkdirs();
代码如下:
package sample;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;
//把文件复制到文件夹或者文件
public class Sample3 {
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
File sourceFile=new File("C:\\新建文件夹\\1\\a.txt");
File targetFile=new File("E:/新建文件夹");
CopyFile(sourceFile,targetFile);
}
public static void CopyFile(File sourceFile,File targetFile) throws IOException {
if(!targetFile.isFile())
else {<span style="font-family: Arial, Helvetica, sans-serif;"> </span>
<span style="white-space:pre"></span><pre name="code" class="java"><span style="white-space:pre"> </span>targetFile.mkdirs();
<span style="white-space:pre"> </span>targetFile=new File(targetFile.getAbsolutePath()+"\\"+sourceFile.getName());
}
//建立输入输出通道缓冲区
FileChannel inChannel=new FileInputStream(sourceFile).getChannel();
System.out.println("检测2");
FileChannel outChannel=new FileOutputStream(targetFile).getChannel();
ByteBuffer buffer=ByteBuffer.allocate(1024);
while(inChannel.read(buffer)!=-1){
System.out.println("检测3");
buffer.flip();
outChannel.write(buffer);
buffer.clear();
}
inChannel.close();
outChannel.close();
}
}