package 递归; /* * 1、递归一定要明确条件,否则容易栈内存溢出 * 2、注意递归次数,次数太多容易造成栈内存溢出 * */ public class DiGuiDemo { public static void main(String[] args) { //toBin(6); int sum = getSum(5); System.out.println(sum); } public static void toBin(int num){ if(num>0){ System.out.println(num%2); toBin(num/2); } } public static int getSum(int num){ if(num==1) return 1; return num+getSum(num-1); } }
package 文件切割合拼; import java.io.File; import java.io.FilenameFilter; public class filByName implements FilenameFilter { private String x; public filByName(String x){ super(); this.x=x; } @Override public boolean accept(File dir, String name) { return name.endsWith(x); } }
package 文件切割合拼; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.util.Properties; public class SplitFileDemo { public static final int SIZE = 1024*1024; public static void main(String[] args) throws IOException { File ff1 = new File("d:\linux.doc"); splitFile_2(ff1); } public static void splitFile_2(File ff1) throws IOException { FileInputStream fis = new FileInputStream(ff1); byte[]buf = new byte[SIZE]; int len =0 ; int count =0; File dir = new File("d:\filepart"); if(!dir.exists()){ dir.mkdirs(); } FileOutputStream fos = null; while((len=fis.read(buf))!=-1){ fos= new FileOutputStream(new File(dir,(count++)+".part")); fos.write(buf,0,len); fos.close(); } Properties p = new Properties(); FileOutputStream fos1 = new FileOutputStream(new File(dir,".Properties")); p.setProperty("filepart", count+""); p.setProperty("filename", ff1.getName()); p.store(fos1, "file part info"); fis.close(); fos1.close(); } public static void splitFile(File file) throws IOException { FileInputStream f1 = new FileInputStream(file); byte[]buf = new byte[SIZE]; FileOutputStream fo1 = null; int len = 0; int count=1; File dir = new File("d:\partfiles"); if(!dir.exists()){ dir.mkdirs(); } while((len=f1.read(buf))!=-1){ fo1 = new FileOutputStream(new File(dir,(count++)+".part")); fo1.write(buf,0,len); } f1.close(); fo1.close(); } }
package 文件切割合拼; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.SequenceInputStream; import java.util.ArrayList; import java.util.Collections; import java.util.Enumeration; import java.util.Properties; /** * 文件合拼: * 思路: * 1、过滤.properties读取配置信息,获取filepart,filename * 2、过滤.part,序列流读取.part文件 * 3、写入指定磁盘文件夹中 * */ public class MegerFileDemo { public static void main(String[] args) throws IOException { File dir = new File("d:\filepart"); megerFile(dir); } public static void megerFile(File dir)throws IOException{ File[]names = dir.listFiles(new filByName(".Properties")); File confile=names[0]; if(names.length!=1){ throw new RuntimeException("文件加载出错,请重新下载此文件再试"); } Properties p = new Properties(); FileInputStream fis = new FileInputStream(confile); p.load(fis); int count = Integer.parseInt(p.getProperty("filepart")); String name= p.getProperty("filename"); File[]parts = dir.listFiles(new filByName(".part")); if(parts.length!=count){ throw new RuntimeException("文件个数不对,请重新下载"); } ArrayList<FileInputStream> arr1 = new ArrayList<FileInputStream>(); for(int x=0;x<parts.length;x++){ //file对象就含有文件路径,所以下面可以使用parts[x]代替new File(dir,(x+".part")) arr1.add( new FileInputStream(new File(dir,(x+".part")))); } Enumeration<FileInputStream> en = Collections.enumeration(arr1); SequenceInputStream sis = new SequenceInputStream(en); FileOutputStream fos = new FileOutputStream(new File(dir,name)); byte[]buf = new byte[1024*1024]; int len= 0; while((len=sis.read(buf))!=-1){ fos.write(buf, 0, len); } sis.close(); fos.close(); } }