- import java.io.File;
- import java.io.FileInputStream;
- import java.io.FileOutputStream;
- import java.io.IOException;
- import java.nio.channels.FileChannel;
- public class Test {
- public static void main(String[] args) {
- // 遍历文件夹 这个文件夹为需要 扫描的文件夹
- File f = new File("D:\\ESS\\cloud");
- showDir(f);
- }
- // 遍历文件夹,如果满足条件则进行拷贝 注意这里会拷贝包括所有的子文件夹下的文件 ,如果不需要拷贝字文件夹下的文件的话,把递归去掉即可 就是 showDir(files[x]); 这一行
- // 注意确保 D:Show文件夹存在
- public static void showDir(File dir) {
- File[] files = dir.listFiles();
- for (int x = 0; x < files.length; x++) {
- if (files[x].isDirectory())
- showDir(files[x]); // 如果是目录,那继续调用这个函数,知道它不是目录,到else部分跳出来
- else {
- //满足条件则进行拷贝 如果是 .java文件就进行拷贝,当然如果是需要拷贝 txt的,那么把.java 替换为 .txt即可
- if (files[x].getName().endsWith(".java")) {
- fileChannelCopy(files[x],new File("D:\\Show\\" + files[x].getName()));
- }
- System.out.println(files[x]);// 出口 当执行到这里,对应的函数也就结束了
- }
- }
- }
- /***
- * 文件拷贝方法
- * @param s
- * @param t
- */
- public static void fileChannelCopy(File s, File t) {
- FileInputStream fi = null;
- FileOutputStream fo = null;
- FileChannel in = null;
- FileChannel out = null;
- try {
- fi = new FileInputStream(s);
- fo = new FileOutputStream(t);
- in = fi.getChannel();// 得到对应的文件通道
- out = fo.getChannel();// 得到对应的文件通道
- in.transferTo(0, in.size(), out);// 连接两个通道,并且从in通道读取,然后写入out通道
- } catch (IOException e) {
- e.printStackTrace();
- } finally {
- try {
- fi.close();
- in.close();
- fo.close();
- out.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }
- }
复制代码
fileChannelCopy(files[x],new File("D:\\Show\\" + files[x].getName()));
请注意这行
这个为你要将文件拷贝到哪个文件夹下,要确保那个文件夹存在,现在是放在 d:show 文件夹下的,如果要换文件夹,请修改成自己的文件夹,并保证文件夹存在就OK了
|