Java 文件换名拷贝
来源:互联网 发布:跑步测试软件 编辑:程序博客网 时间:2024/05/01 04:38
最近看了一道面试题,学习一下FileFilter和FileNameFilter
编写一个程序,将d:\java目录下的所有.java文件复制到d:\jad目录下,并将原来文件的扩展名从.java改为.jad
package com.darren.test.file;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.FilenameFilter;import java.io.IOException;public class FileFilterTest { public static void main(String[] args) { File srcDir = new File("D:/java"); if (!srcDir.exists() || !srcDir.isDirectory()) { srcDir.mkdir(); } /** * 长见识了,之前不知道还有FIleFilter和FileNameFilter来过滤文件,一般遇到这种问题都是自己在读文件时去判断文件的后缀 */ /** * 这也就是Java的策略模式,只要实现不同的filter接口的不同逻辑,就可以得到不同的结果,只不过, 我这里是匿名实现的FileFilter和FileNameFilter接口 */ // FileFilter fileFilter = new FileFilter() { // // @Override // /** // * // * @param pathname 当前读到的文件 // * @return // */ // public boolean accept(File pathname) { // return pathname.getName().endsWith(".java"); // } // }; // // File[] files = srcDir.listFiles(fileFilter); FilenameFilter fileNameFilter = new FilenameFilter() { @Override /** * @param dir - 被找到的文件所在的目录 * @param name - 文件的名称 * @return */ public boolean accept(File dir, String name) { return name.endsWith(".java"); } }; File[] files = srcDir.listFiles(fileNameFilter); File targetDir = new File("D:/jad"); if (!targetDir.exists() || !targetDir.isDirectory()) { targetDir.mkdir(); } for (File file : files) { try { FileInputStream fin = new FileInputStream(file); String targetFileName = file.getName().replaceAll("\\.java$", ".jad"); File targetFile = new File(targetDir, targetFileName); FileOutputStream fout = new FileOutputStream(targetFile); copy(fin, fout); try { fin.close(); fout.close(); } catch (IOException e) { e.printStackTrace(); } } catch (FileNotFoundException e) { e.printStackTrace(); } } } private static void copy(FileInputStream fin, FileOutputStream fout) { int length = 0; byte[] buff = new byte[1024]; try { while ((length = fin.read(buff)) != -1) { fout.write(buff, 0, length); } } catch (IOException e) { e.printStackTrace(); } }}
1. 得到某个目录下的所有的java文件集合 1.1 得到目录
File srcDir = new File("D:/java");1.2 得到目录下的所有java文件:
File[] files = srcDir.listFiles(fileFilter);1.3 只想得到.java的文件:
FileFilter fileFilter = new FileFilter() { @Override public boolean accept(File pathname) { return pathname.getName().endsWith(".java"); } };
2.将每个文件复制到另外一个目录,并改扩展名
2.1 得到目标目录,如果目标目录不存在,则创建之
2.2 根据源文件名得到目标文件名,注意要用正则表达式,注意.的转义。
2.3 根据表示目录的File和目标文件名的字符串,得到表示目标文件的File。
//要在硬盘中准确地创建出一个文件,需要知道文件名和文件的目录。
2.4 将源文件的流拷贝成目标文件流,拷贝方法独立成为一个方法,方法的参数采用抽象流的形式。
//方法接受的参数类型尽量面向父类,越抽象越好,这样适应面更宽广。
分析listFiles方法内部的策略模式实现原理
public File[] listFiles(FileFilter filter){ File[] files = listFiles(); //Arraylist acceptedFilesList = new ArrayList(); File[] acceptedFiles = new File[files.length]; int pos = 0; for(File file: files){ boolean accepted = filter.accept(file);if(accepted){ //acceptedFilesList.add(file); acceptedFiles[pos++] = file;} } Arrays.copyOf(acceptedFiles,pos); //return (File[])accpetedFilesList.toArray();}
0 0
- Java 文件换名拷贝
- java文件拷贝
- Java拷贝文件
- java实现文件拷贝
- java编程文件拷贝
- Java拷贝大文件
- java拷贝文件代码
- java文件拷贝
- Java 文件拷贝
- java 文件拷贝操作
- java拷贝文件
- Java 拷贝文件内容
- java文件拷贝
- java之 ------ 文件拷贝
- Java文件拷贝
- java文件拷贝类
- Java文件拷贝
- java文件的拷贝
- express 4.0 session 用法与填坑指南
- 黑马程序员-用递归复制文件夹
- 关于优先级反转
- [JIRA] Jira4系列、Jira6系列破解实战
- 【c++主题】一套不错的考试题
- Java 文件换名拷贝
- 我程序世界的“术”与“道”
- 大话设计模式____装饰器模式
- Jmock-使用ClassImposteriser扩展mock class对象
- 拼包函数及网络封包的异常处理(含代码)
- Android中的Audio播放:控制Audio输出通道切换
- 大数据之Hadoop平台(一)Centos6.5(64bit)编译Hadoop2.5.1源码
- Struts2实现验证码
- hdu 5033 Building(斜率优化)