本帖最后由 ash午夜阳光 于 2015-11-17 01:38 编辑
学习io流第二天了,回宿舍写了个拷贝文件的代码,老师说以前点招考过这题,就自己试着做了一下,欢迎交流
package reader_writer;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Scanner;
//完成文件夹的复制粘贴,将"E:/javase_demo"文件夹复制到"E:/copy"
/**
* 首先用递归找到所有的.java文件 在找到.java文件的基础上进行操作 1.创建输入流对象 2.获取所要复制文件夹为根目录的 文件的相对路径 字符串
* eg:javase_demo\src\com\itheima\day01_05\ 3.建立输出路径 4. 创建文件夹 5.获取输出流对象
* 6.io流读写数据 7.关流
*
* @author LiuGuangshun
*
*/
public class UserCopy {
public static void main(String[] args) throws IOException {
copyFile(getFromFile(), getToFile());
}
public static File getFromFile() {
System.out.println("请输入文件夹路径");
Scanner sc = new Scanner(System.in);
while (true) {
String s = sc.nextLine();
File file = new File(s);
if (!file.isDirectory()) {
System.out.println("输入的不是路径");
} else if (file.isFile()) {
System.out.println("输入的是文件,不是文件夹路径");
} else {
return file;
}
}
}
public static File getToFile() {
System.out.println("请输入要拷贝到那个路径下:");
Scanner sc = new Scanner(System.in);
while (true) {
String s = sc.nextLine();
File file = new File(s);
if (!file.isDirectory()) {
System.out.println("输入的不是路径");
} else if (file.isFile()) {
System.out.println("输入的是文件,不是路径");
} else {
return file;
}
}
}
public static void copyFile(File fileFrom, File fileTo) throws IOException {
// TODO Auto-generated method stub
copy(fileFrom, fileTo, new File(fileFrom.getAbsolutePath()));
}
public static void copy(File fileFrom, File fileTo, File file)
throws IOException {
// TODO Auto-generated method stub
if (file.isFile()) {
// 创建输入流对象
BufferedInputStream bis = new BufferedInputStream(
new FileInputStream(file));
// 获取所要复制文件夹为根目录的 文件的相对路径 字符串
// eg:javase_demo\src\com\itheima\day01_05\
// 前后都要处理:(前只留fromFile最后一级目录********后只保留文件绝对路径的文件名之前)
String s = fileFrom.getName()
+ file.getAbsolutePath().substring(
fileFrom.getAbsolutePath().length(),
file.getAbsolutePath().length()
- file.getName().length());
// 建立输出路径(只建立路径即可,文件会在写入输出流对象时创建)
File to = new File(fileTo, s);
// 创建文件夹
to.mkdirs();
// 获取输出流对象
BufferedOutputStream bos = new BufferedOutputStream(
new FileOutputStream(new File(to, file.getName())));
// 读写数据
byte[] bys = new byte[1024];
int len = 0;
while ((len = bis.read(bys)) != -1) {
bos.write(bys, 0, len);
}
// 关流
bis.close();
bos.close();
} else {
File[] fls = file.listFiles();
if (fls != null) {
for (File file2 : fls) {
copy(fileFrom, fileTo, file2);
}
}
}
}
}
|
-
1.png
(10.2 KB, 下载次数: 70)
输入
-
2.png
(199.23 KB, 下载次数: 61)
-
3.png
(200.54 KB, 下载次数: 56)
|