- 浏览: 21532 次
- 性别:
文章分类
最新评论
将d:\java目录下的所有.java文件复制到d:\jad目录下,并将原来文件的扩展名从.java改为.jad
package com.itheima; import com.itheima.util.IOUtils; /** * 将d:\java 目录下的所有.java 文件复制到d:\jad 目录下,并将原来文件的扩展名从.java 改为.jad * * @author mrng * */ public class TestCopy { public static void main(String[] args) throws Exception { /** * copyFilesAndChangeExtension(String srcDir, String extension, String * destDir, String newExtension, boolean searchSubDir) * 这个方法提供了强大的文件复制功能,通过不同的参数组合,可以达到各种效果 * * srcDir指定要复制的目录 extension指定要复制的文件的扩展类型,如果不指定(""或null),将会复制指定目录下的所有文件 * 还可以使用排除法(使用"!")过滤文件,比如,extension 的值为"!.java",那么除了".java"文件,其它的文件都将复制 * destDir指定目的地目录 * searchSubDir指定是否对指定目录的子孙目录下的文件也进行复制 * */ String srcDir = "src/com/itheima"; String destDir = "src/copyFiles"; //将xxx目录下的所有.java 文件复制到xxx目录下,并将原来文件的扩展名从.java 改为.jad IOUtils.copyFilesAndChangeExtension(srcDir, ".java", destDir, ".jad", false); } }
package com.itheima.util; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.FilenameFilter; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.util.ArrayList; import java.util.List; /** * IO 工具类 * * @author mrng * */ public class IOUtils { /** * 将指定文件拷贝到目的地 这里采用的是基础流(FileinputStream,FileOutputStream)+byte数组(缓冲区)实现 * 当然也可以使用包装流(Buffered....) * * @param src * 将要拷贝的文件 * @param dest * 将文件要保存到的目标目录 * */ public static void copy(String src, String dest) { copy(src, dest, null); } /** * copy(String src, String dest)的重载形式,可以更改文件扩展名 * * @param src * @param dest * @param newExtension */ public static void copy(String src, String dest, String newExtension) { File srcFile = new File(src); // 如果文件不存在或是一个目录,抛出异常 if (!srcFile.exists() || srcFile.isDirectory()) throw new RuntimeException("文件不存在"); File destDir = new File(dest); // 如果目标目录不存在,则创建 if (!destDir.exists()) { destDir.mkdirs(); } else { // 如果是文件,抛出异常 if (destDir.isFile()) { throw new RuntimeException("您指定的目的地是一个文件,请重新指定目录"); } } // 代表目标文件的完整路劲信息的对象 File destFile = null; System.out.println(); // 判断要不要改变文件的扩展名 if (newExtension == null || newExtension.trim().equals("")) { // 不改变文件扩展名 destFile = new File(dest + "/" + srcFile.getName()); } else { // 改变文件扩展名 // 如果文件没有扩展名,直接加上新的扩展名 if (getExtension(srcFile.getPath()).equals("")) { destFile = new File(dest + "/" + srcFile.getName() + newExtension); } else { // 如果文件有扩展名,替换为新的扩展名 String newFilename = srcFile.getName(); newFilename = newFilename.substring(0, newFilename.lastIndexOf(".")) + newExtension; destFile = new File(dest + "/" + newFilename); } } InputStream is = null; OutputStream os = null; // 存放文件片段的缓冲区 byte[] buf = new byte[1024 * 8]; // 记录每次读取了多少byte数据 int len; try { is = new FileInputStream(srcFile); os = new FileOutputStream(destFile); // 循环读取数据并写入到输出流 while ((len = is.read(buf)) != -1) { os.write(buf, 0, len); } System.out.println("拷贝成功!"); System.out.println("文件\"" + srcFile.getName() + "\n\"已从\"" + srcFile.getAbsolutePath() + "\n拷贝到\"" + destFile.getAbsolutePath() + "\""); } catch (IOException e) { throw new RuntimeException("文件拷贝出现错误,请重试!"); } finally { // 关闭流 close(is, os); } } /** * 获得文件的扩展名 * * @param filePath * @return */ public static String getExtension(String filePath) { File file = new File(filePath); // 如果文件不存在,抛出异常 if (!file.exists()) throw new RuntimeException("文件不存在"); // 得到文件名 String fileName = file.getName(); // 找出属于扩展名的那个“.” int index = fileName.lastIndexOf("."); // 如果文件没有扩展名,返回"" if (index < 1) { return ""; } // 截取扩展名部分 String extension = fileName.substring(index, fileName.length()); return extension; } /** * 将指定目录下的文件(指定扩展名)复制到指定目录(可以更改扩展名) * * @param srcDir * 源目录 * @param extension * 要复制的文件的扩展名,如果不指定,就代表所有文件 * @param destDir * 目标目录 * @param newExtension * 新的扩展名 * @param searchSubDir * 是否对指定的源目录下的子目录也执行相同的操作 */ public static void copyFilesAndChangeExtension(String srcDir, String extension, String destDir, String newExtension, boolean searchSubDir) { File srcFile = new File(srcDir); // 如果目录不存在或不是一个目录,抛出异常 if (!srcFile.exists() || !srcFile.isDirectory()) throw new RuntimeException("目录不存在"); File newDestDir = new File(destDir); // 如果目标目录不存在,则创建 if (!newDestDir.exists()) { newDestDir.mkdirs(); } else { // 如果是文件,抛出异常 if (newDestDir.isFile()) { throw new RuntimeException("您指定的目的地是一个文件,请重新指定目录"); } } // 文件清单 List<File> fileList = new ArrayList<File>(); // 获取指定目录的文件清单 getDirList(fileList, srcFile, extension, searchSubDir, new MyFilenameFilter()); // 复制文件并更改扩展名 for (File fiel : fileList) { copy(fiel.getPath(), newDestDir.getPath(), newExtension); } } /** * 获得指定目录的文件清单 * * @param fileList * 保存文件清单的集合 * @param file * 要获取文件清单的目录 * @param extension * 扩展名,如果不指定,就代表所有文件 * @param searchSubDir * 是否查找指定目录的子目录 * @param fileanmeFilter * 文件名过率器 * @return 返回指定目录的文件清单 */ public static void getDirList(List<File> fileList, File file, String extension, boolean searchSubDir, FilenameFilter fileanmeFilter) { getDirList(fileList, file, extension, searchSubDir, new MyFilenameFilter(), 0); } /** * getDirList(List<File> fileList, File file, String extension, boolean * searchSubDir, FilenameFilter fileanmeFilter) 的重载形式,多了一个功能性参数 * * @param level * 记录目录层级 */ private static void getDirList(List<File> fileList, File file, String extension, boolean searchSubDir, FilenameFilter fileanmeFilter, int level) { //目录层级+1 level ++; // 如果file是目录就遍历 if (file.isDirectory()) { File[] files = file.listFiles(); if (files == null || files.length == 0) { return; } // 如果需要查找指定目录的子目录,就递归 if (level == 1 || searchSubDir == true) { for (File f : files) { getDirList(fileList, f, extension, searchSubDir, fileanmeFilter); } } } else if (file.isFile()) { // 如果是文件并且extension已指定,就对其进行过滤 if (extension != null && !extension.trim().equals("")) { if (fileanmeFilter.accept(file, extension)) { fileList.add(file); } } else { // 如果没有指定extension,不进行过滤 fileList.add(file); } } } /** * 关闭流 */ private static void close(InputStream is, OutputStream os) { // 关闭流,如果关闭不成功,将流对象置为null if (is != null) { try { is.close(); } catch (IOException e) { is = null; e.printStackTrace(); } } // 关闭流,如果关闭不成功,将流对象置为null if (os != null) { try { is = null; os.close(); } catch (IOException e) { e.printStackTrace(); } } } }
package com.itheima.util; import java.io.File; import java.io.FilenameFilter; /** * 此类可以根据扩展名过滤文件 * * @author mrng * */ public class MyFilenameFilter implements FilenameFilter { /** * 对指定文件进行过滤 * * @param file * 指定的文件 * * @param extension * 要过滤的扩展名 此参数有两种用法: * 1,比如".java",如果文件扩展名为".java",返回true * 2,比如"!.java",如果文件扩展名不是".java",则返回true */ public boolean accept(File file, String extension) { // file==null直接返回false // 如果extension为null或"",那么调用这个方法没无意义了,返回false // 如果file不存在或是一个目录,返回false if (file == null || extension == null || "".equals(extension.trim()) || !file.exists() || file.isDirectory()) { return false; } // 获得文件的扩展名 String fileExtension = IOUtils.getExtension(file.getPath()); if (extension.startsWith("!")) { if (fileExtension.equals(extension.substring(1))) { return false; } return true; } else { if (fileExtension.equals(extension)) { return true; } return false; } } }
发表评论
-
IO输入与输出
2012-08-13 17:21 0IO/输入输出 File类 它是IO包中唯一代表磁盘文件本身信 ... -
网络编程-总结01
2012-08-12 20:38 731网络模型: OSI参考模型 TCP/IP参考模型 ... -
IO-概念、流细节
2012-08-12 19:55 934流:就是用于读写数据的,在Java程序中,对于数据的输 ... -
黑马程序员-Java基础加强-知识总结
2012-07-30 04:24 1063------- android培训、java ... -
黑马程序员-银行业务调度系统的分析、设计、实现
2012-07-28 20:19 824------- android培训、java培训、期待与 ... -
黑马程序员-交通灯管理系统的分析、设计、实现
2012-07-28 01:49 741------- android培训、java培训、期待与 ... -
黑马程序员-编程基础03-单例设计模式
2012-07-27 17:47 610------- android培训、java培训、期待与 ... -
黑马程序员-编程基础02-小知识点
2012-07-27 17:12 882------- android培训、jav ... -
黑马程序员-编程基础01-进制
2012-07-26 17:19 908------- android培训、java培训、期待与您交流 ... -
黑马程序员-Java开发前奏
2012-07-26 17:10 781------- android培训、java培训、期待与您交流 ... -
IO-1
2012-07-24 18:26 08.File类 1)File类是IO包中唯一代表磁 ... -
IO-2
2012-07-24 18:24 011.字符编码 计算机里只有数字,计算机里的一 ... -
为什么匿名内部类只能访问其所在方法中的final变量
2012-07-24 18:03 0(1).所谓“局部内部类”就是在对象的方法成员内部定义的类。而 ... -
黑马程序员-网络编程-总结02
2012-07-25 00:04 690------- android培训、java培训、期待与 ... -
黑马程序员-GUI
2012-07-25 00:08 668------- android培训、java培训、期待与 ... -
黑马程序员-IO包中的其它对象
2012-07-25 00:04 684------- android培训、ja ... -
黑马程序员-异常
2012-07-25 00:03 733------- android培训、java培训、期待与 ... -
黑马程序员-&和&&的区别
2012-07-24 14:31 569------- android培训、java培训、期待与 ... -
黑马程序员-几种常用排序算法
2012-07-24 14:06 598------- android培训、java培训、期待与 ... -
黑马程序员-wait and notify
2012-07-24 13:12 732------- android培训、jav ...
相关推荐
黑马程序员-SpringCloud-学习笔记-03-Eureka注册中心
黑马程序员-SpringCloud-学习笔记01-认识微服务
手动创建项目涉及到编辑.pro文件,这是一种Qt特有的项目描述文件,用于定义项目的目标、编译规则和资源。一个最简单的Qt应用程序的代码示例也会在教程中给出,帮助新手理解基本的项目结构和运行流程。 Qt的核心机制...
在Java编程语言中,类加载器(ClassLoader)是至关重要的组成部分,它负责将类的字节码从磁盘、网络或其他存储介质加载到JVM(Java虚拟机)中,并将其转换为可执行的Java对象。类加载器的学习是深入理解Java运行机制...
黑马程序员-SpringCloud-学习笔记-02-微服务拆分及远程调用
在这个例子中,我们遍历了`files`列表中的每一个文本文件,读取每一行内容并写入到名为`merged.txt`的新文件中。最后,我们打印出合并后文件的内容以确认合并成功。 接下来,我们讨论“切割文件”。文件切割通常...
通过阅读《黑马程序员---注解归纳》这篇博客,你将能够深入理解注解的工作原理,学习如何利用注解提升代码质量,并掌握在不同场景下使用注解的最佳实践。同时,配合提供的`annotation.txt`文件,你可能能获取到更多...
黑马程序员 - 毕向东 - Java基础教学 - 第02天 个人观看视频总结文档
黑马程序员 - 毕向东 - Java基础教学 - 第01天 个人观看视频总结文档
day01_Object类、常用API day02_Collection、泛型 day03_List、Set、数据结构、Collections day04_Map,斗地主案例 day05_异常,线程 day06_线程、同步 day07_等待与唤醒案例、线程池、Lambda表达式 ...
黑马程序员-java32期培训视频(基础+就业)黑马程序员-java32期培训视频(基础+就业)
总结,"黑马程序员-tomcat集群部署文档资料"涵盖的范围广泛,从基础的集群概念和原理,到具体的Tomcat集群配置和优化,再到高级的源码分析,对于希望提升服务器管理和运维能力的IT从业者来说是一份宝贵的参考资料。...
本教程将聚焦于Java中的多线程技术,以“黑马程序员-java多线程技术01”为学习起点,探讨如何在Java中实现并管理线程。 首先,我们来理解什么是线程。线程是操作系统分配CPU时间的基本单元,一个进程中可以有多个...
- JavaBean可以通过`PropertyUtils`或`BeanUtils`类(来自Apache Commons BeanUtils库)进行便捷的属性读写,例如`BeanUtils.copyProperties(destBean, srcBean)`可以复制一个bean的所有属性到另一个bean。...
黑马程序员-Python-Django实现从0开发一个博客系统
在《黑马程序员 - Java基础教学 - 05 - 面向对象(1)》文档中,详细讲解了面向对象的基本概念及其在Java中的应用。 ### 面向对象与面向过程 面向对象和面向过程都是解决问题的思维模式,但面向对象更注重将功能和...
标题“黑马程序员------hash改变造成的内存泄露”提示我们,这个问题与哈希值的变化有关,这可能会导致程序无法正确地释放不再使用的内存,从而影响系统性能。下面我们将深入探讨这个话题。 哈希(Hash)通常指的是...
黑马程序员--毕向东全套Java视屏,讲解的相当全面,各位如果需要,尽快下载哦! 另外如果视频链接存在打不开的问题,请留言,必定及时更新链接。
黑马程序员提供的这篇关于泛型的学习注意点,结合了源码分析和工具应用,旨在帮助开发者深入理解并有效运用泛型。下面将详细阐述泛型的主要知识点: 1. 泛型的基本概念: 泛型是Java SE 5.0引入的新特性,主要用于...