java实现文件拷贝
java实现文件拷贝主要用到File类和FileinputStream和FileoutputStream方法
拷贝主体
要拷贝文件,就得有源文件和你要拷贝到的目标目录,这里我们可以设置两个参数:源文件:“File source”,要拷贝到的目标目录”File targetDir”。
首先先判断目标目录是否存在,若果不存在就创建它,这一步分别用exists()、mkdir()实现。
if (!targetDir.exists()) {
targetDir.mkdirs();
}
根据提供的源文件文件名,结合目标目录构建一个目标文件对象
File target = new File(targetDir, sourceFile.getName());
开始拷贝,此时开始使用流的知识,先用inputStream和outputStream分别获取源文件和和目标文件的字节输入\出流,将获取到的输入流读取到声明好的字节数组中,此时用len来表示读取到的字节数组的长度,最后将读取到的字节数组写入到输出流中,使用Write时,一定到写明读入的数组名,读取的起始位置和长度。最最后一定要讲两个流全部关闭,否则看不到效果。期间的异常全部捕获。下面是代码:
InputStream is = null;
OutputStream os = null;
try {
is = new FileInputStream(sourceFile);
os = new FileOutputStream(target);
byte[] b = new byte[1024];
int len = 0;
System.out.println("开始拷贝...");
while ((len = is.read(b)) != -1) {
os.write(b, 0, len);
}
System.out.println("拷贝完成...");
} catch (FileNotFoundException e) {
e.printStackTrace();
}catch (IOException e) {
e.printStackTrace();
}finally {
try {
if (Objects.nonNull(os)) {
os.close();
}
if (Objects.nonNull(is)) {
is.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
判断目录
文件拷贝部分完成,然后再判断源文件是否是标准文件,标准文件即非目录文件,如果源文件是标准文件,则直接拷贝(上面做好的方法),源文件是目录的话,递归进入目录,重复执行创建目录行为。
if (source.isFile()) {
copyFile(source, targetDir);
}else {
targetDir = new File(targetDir,source.getName());
if (!targetDir.exists()) {
targetDir.mkdirs();
}
//获取源目录下的所有子文件
File[] subFiles = source.listFiles();
if (subFiles != null) {
for (int i = 0; i < subFiles.length; i++) {
copy(subFiles[i], targetDir);
}
}
}
测试
调用main方法
public static void main(String[] args) {
File sourFile = new File("F:\\1");
File tarFileDir = new File("E:\\");
copy(sourFile, tarFileDir);
}
结果:
你学废了么?
下面是代码的全部体:
public class FileTools {
public static void copy(File source,File targetDir) {
if (source.isFile()) {
copyFile(source, targetDir);
}else {
targetDir = new File(targetDir,source.getName());
if (!targetDir.exists()) {
targetDir.mkdirs();
}
File[] subFiles = source.listFiles();
if (subFiles != null) {
for (int i = 0; i < subFiles.length; i++) {
copy(subFiles[i], targetDir);
}
}
}
}
private static void copyFile(File sourceFile,File targetDir) {
if (!targetDir.exists()) {
targetDir.mkdirs();
}
File target = new File(targetDir, sourceFile.getName());
InputStream is = null;
OutputStream os = null;
try {
is = new FileInputStream(sourceFile);
os = new FileOutputStream(target);
byte[] b = new byte[1024];
int len = 0;
System.out.println("开始拷贝...");
while ((len = is.read(b)) != -1) {
os.write(b, 0, len);
}
System.out.println("拷贝完成...");
} catch (FileNotFoundException e) {
e.printStackTrace();
}catch (IOException e) {
e.printStackTrace();
}finally {
try {
if (Objects.nonNull(os)) {
os.close();
}
if (Objects.nonNull(is)) {
is.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) {
File sourFile = new File("F:\\1");
File tarFileDir = new File("E:\\");
copy(sourFile, tarFileDir);
}
}
版权声明:本文为YoungProMaker原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。