總結的思想及策略模式的解析:java
class jad2java{正則表達式
1. 獲得某個目錄下的全部的java文件集合ip
1.1 獲得目錄 File srcDir = new File("d:\\java");字符串
1.2 獲得目錄下的全部java文件:File[] files = srcDir.listFiles(new MyFileFilter());get
1.3 只想獲得.java的文件: class MyFileFilter implememyts FileFilter{it
public boolean accept(File pathname){io
return pathname.getName().endsWith(".java")class
}import
}原理
2.將每一個文件複製到另一個目錄,並改擴展名
2.1 獲得目標目錄,若是目標目錄不存在,則建立之
2.2 根據源文件名獲得目標文件名,注意要用正則表達式,注意.的轉義。
2.3 根據表示目錄的File和目標文件名的字符串,獲得表示目標文件的File。
//要在硬盤中準確地建立出一個文件,須要知道文件名和文件的目錄。
2.4 將源文件的流拷貝成目標文件流,拷貝方法獨立成爲一個方法,方法的參數採用抽象流的形式。
//方法接受的參數類型儘可能面向父類,越抽象越好,這樣適應面更寬廣。
}
分析listFiles方法內部的策略模式實現原理
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();
}
package cglib;
import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.FilenameFilter; import java.io.InputStream; import java.io.OutputStream; public class StringNumber { public static void main(String[] args) throws Exception { File srcDir = new File("D:\\文件\\QC處理\\2016年11月\\java"); if(!(srcDir.exists() && srcDir.isDirectory())) throw new Exception("目錄不存在"); File[] files = srcDir.listFiles( new FilenameFilter(){ public boolean accept(File dir, String name) { return name.endsWith(".java"); } } ); System.out.println(files.length); File destDir = new File("D:\\文件\\QC處理\\2016年11月\\jad"); if(!destDir.exists()) destDir.mkdir(); for(File f :files){ FileInputStream fis = new FileInputStream(f); String destFileName = f.getName().replaceAll("\\.java$", ".jad"); FileOutputStream fos = new FileOutputStream(new File(destDir,destFileName)); copy(fis,fos); fis.close(); fos.close(); } } private static void copy(InputStream ips,OutputStream ops) throws Exception{ int len = 0; byte[] buf = new byte[1024]; while((len = ips.read(buf)) != -1){ ops.write(buf,0,len); } } }