黑马程序员_Java基础_IO流(File类和properties类相关操作)

来源:互联网 发布:人的极限寿命知乎 编辑:程序博客网 时间:2024/05/28 18:44

一、IO(File概述)

File类:

用来将文件或者文件夹封装成对象,方便对文件与文件夹的属性信息进行操作。

File对象可以作为参数传递给流的构造函数。


[java] view plaincopy
  1. /* 
  2. File概述: 
  3. */  
  4. import java.io.*;  
  5. class FileDemo  
  6. {  
  7.     public static void main(String[] args)   
  8.     {  
  9.         consMethod();  
  10.     }  
  11.     public static void consMethod()//创建File对象  
  12.     {  
  13.         //将a.txt封装成对象。可以将已有和未出现的文件或文件夹封装成对象  
  14.         File f1=new File("a.txt");//1  
  15.   
  16.         File f2=new File("e:\\abc","b.txt");//2  
  17.           
  18.         File d=new File("e:\\abc");//3  
  19.         File f3=new File(d,"c.txt");  
  20.   
  21.         File f4=new File("c:"+File.separator+"abc"+File.separator+"e.txt");  
  22.   
  23.         sop("f1:"+f1);  
  24.         sop("f2:"+f2);  
  25.         sop("f3:"+f3);  
  26.         sop("f4:"+f4);  
  27.     }  
  28.     public static void sop(Object obj)  
  29.     {  
  30.         System.out.println(obj);  
  31.     }  
  32. }  


二、IO(File对象功能)

File类常见方法:

1.创建。

boolean createNewFile():在指定位置创建文件,如果该文件已经存在,则不创建,返回false

 和输出流不一样,输出流对象一创建文件,而且文件已经存在,会覆盖。

boolean mkdir():创建一级文件夹

boolean mkdirs():创建多级文件夹

2.删除。

boolean delete():删除失败返回false

boolaan deleteOnExit():在程序退出时删除指定文件。

3.判断。

boolean canExecute():测试应用程序是否可以执行此抽象路径名表示的文件。 

boolean exists():文件是否存在。

boolean isFile():测试此抽象路径名表示的文件是否是一个标准文件。

boolean isDirectory():测试此抽象路径名表示的文件是否是一个目录。

boolean isHidden():测试此抽象路径名指定的文件是否是一个隐藏文件。

boolean isAbsolute():测试此抽象路径名是否为绝对路径名。

4.获取信息。

String getName():返回由此抽象路径名表示的文件或目录的名称。

String getPath():将此抽象路径名转换为一个路径名字符串。

String getParent():返回此抽象路径名父目录的路径名字符串;如果此路径名没有指定父目录,则返回 null

File getAbsoluteFile():返回此抽象路径名的绝对路径名形式。等同于 new File(this.getAbsolutePath())。 

String getAbsolutePath():返回此抽象路径名的绝对路径名字符串。

long lastModified():返回此抽象路径名表示的文件最后一次被修改的时间。 

long length():返回由此抽象路径名表示的文件的长度。如果此路径名表示一个目录,则返回值是不确定的。

boolean renameTo(File dest):重新命名此抽象路径名表示的文件。

[java] view plaincopy
  1. /* 
  2. File类常见方法: 
  3.  
  4. */  
  5. import java.io.*;  
  6. class FileDemo  
  7. {  
  8.     public static void main(String[] args) throws IOException  
  9.     {  
  10.         consMethod();  
  11.         method_1();  
  12.         method_2();  
  13.         method_3();  
  14.         method_4();  
  15.         method_5();  
  16.     }  
  17.       
  18.     public static void method_1()throws IOException  
  19.     {  
  20.         sop("method_1:");  
  21.   
  22.         File f=new File("file.txt");  
  23.         f.deleteOnExit();//告诉结束程序时删除file.txt  
  24.         sop("create:"+f.createNewFile());  
  25.         sop("delete:"+f.delete());  
  26.   
  27.         //创建文件夹(注意:目录已存在,则创建失败!)  
  28.         File dir1=new File("abc");  
  29.         sop("mkdir:"+dir1.mkdir());//创建一级文件夹  
  30.         File dir2=new File("abc\\bcd\\asd");  
  31.         sop("mkdirs:"+dir2.mkdirs());//创建多级文件夹  
  32.   
  33.   
  34.     }  
  35.   
  36.     public static void method_2()throws IOException  
  37.     {  
  38.         sop("method_2:");  
  39.   
  40.         File f=new File("file.txt");  
  41.         sop("exists:"+f.exists());  
  42.         //sop("execute:"+f.canExecute());  
  43.     }  
  44.   
  45.     public static void method_3()throws IOException  
  46.     {  
  47.         sop("method_3:");  
  48.   
  49.         File f=new File("file.txt");  
  50.   
  51.         /*注意:在判断文件对象是否是文件或者目录时,必须先判断文件对象封装的内容是否存在。 
  52.         通过exists判断。 
  53.         */  
  54.         f.createNewFile();  
  55.         //f.mkdir();  
  56.         sop("isDirectory:"+f.isDirectory());  
  57.         sop("isFile:"+f.isFile());  
  58.   
  59.         sop("isAbsolute:"+f.isAbsolute());//测试此抽象路径名是否为绝对路径名。  
  60.     }  
  61.     public static void method_4()throws IOException  
  62.     {  
  63.         sop("method_4:");  
  64.   
  65.         File f=new File("a.txt");  
  66.         f.createNewFile();  
  67.         sop("path:"+f.getPath());  
  68.         sop("abspath:"+f.getAbsolutePath());/*返回此抽象路径名父目录的路径名字符串;如果此路径名没有指定父目录,则返回 null。 
  69.                                               如果相对路径中有上一层目录,那么就返回该目录。 
  70.                                             */  
  71.     }  
  72.     public static void method_5()throws IOException  
  73.     {  
  74.         sop("method_5:");  
  75.         File f1=new File("e:\\a.txt");  
  76.         f1.createNewFile();  
  77.         File f2=new File("e:\\b.txt");  
  78.   
  79.         sop("rename:"+f1.renameTo(f2));  
  80.     }  
  81.   
  82.   
  83.     public static void consMethod()//创建File对象  
  84.     {  
  85.         sop("consMethod:");  
  86.         //将a.txt封装成对象。可以将已有和未出现的文件或文件夹封装成对象  
  87.         File f1=new File("a.txt");//1  
  88.   
  89.         File f2=new File("e:\\abc","b.txt");//2  
  90.           
  91.         File d=new File("e:\\abc");//3  
  92.         File f3=new File(d,"c.txt");  
  93.   
  94.         File f4=new File("c:"+File.separator+"abc"+File.separator+"e.txt");  
  95.   
  96.         sop("f1:"+f1);  
  97.         sop("f2:"+f2);  
  98.         sop("f3:"+f3);  
  99.         sop("f4:"+f4);  
  100.     }  
  101.     public static void sop(Object obj)  
  102.     {  
  103.         System.out.println(obj);  
  104.     }  
  105. }  



三、IO(File对象功能-文件列表)

[java] view plaincopy
  1. /* 
  2. static File[] listRoots():列出可用的文件系统根。 
  3. String[] list():返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中的文件和目录。 
  4.  
  5. String[] list(FilenameFilter filter)返回一个字符串数组,这些字符串指定此抽象路径名表示的 
  6. 目录中满足指定过滤器的文件和目录。除了返回数组中的字符串必须满足过滤器外,此方法的行为与  
  7. list() 方法相同。如果给定 filter 为 null,则接受所有名称。否则,当且仅当在此抽象路径名及 
  8. 其表示的目录中的文件名或目录名上调用过滤器的  
  9. FilenameFilter.accept(java.io.File, java.lang.String) 方法返回 true 时,该名称才满足过滤器。 
  10.  
  11. */  
  12. import java.io.*;  
  13. class FileDemo2   
  14. {  
  15.     public static void main(String[] args)   
  16.     {  
  17.         listDemo_1();//获取根目录文件和文件夹名称  
  18.         listDemo_2();//获取根目录文件和文件夹名称(只提取*.doc文件)  
  19.         listDemo_3();//获取根目录文件和文件夹名称以及文件的长度       
  20.     }  
  21.     public static void listDemo_3()  
  22.     {  
  23.         File dir=new File("e:\\");  
  24.         File[] files=dir.listFiles();  
  25.         for(File f:files)  
  26.         {  
  27.             System.out.println("文件名:"+f.getName()+"长度:"+f.length());  
  28.         }  
  29.         System.out.println();  
  30.     }  
  31.     public static void listDemo_2()  
  32.     {  
  33.         File dir=new File("e:\\");  
  34.         String[] arr=dir.list(new FilenameFilter(){  
  35.           
  36.         public boolean accept(File fir,String name)  
  37.         {  
  38.             /* 
  39.             if(name.endsWith(".doc")) 
  40.                 return true; 
  41.             else 
  42.                 return false; 
  43.             */  
  44.   
  45.             return name.endsWith(".doc");  
  46.         }  
  47.           
  48.         });  
  49.         for(String name:arr)  
  50.         {  
  51.             System.out.println(name);  
  52.         }  
  53.         System.out.println();  
  54.     }  
  55.     public static void listDemo_1()  
  56.     {  
  57.         File f=new File("c:\\");  
  58.         String[] names=f.list();//调用list的File对象必须是一个目录,该目录必须存在。  
  59.         for(String name:names)  
  60.         {  
  61.             System.out.println(name);  
  62.         }  
  63.         System.out.println();  
  64.     }  
  65.     public static void listRootsDemo()  
  66.     {  
  67.         File[] files =File.listRoots();  
  68.         for(File f:files)  
  69.         {  
  70.             System.out.println(f);  
  71.         }  
  72.         System.out.println();  
  73.     }  
  74. }  


四、IO(列出目录下所有内容-递归)

[java] view plaincopy
  1. /* 
  2. 列出指定目录下文件或文件夹,包含子目录中的内容。 
  3. 也就是列出指定目录下的所有内容。 
  4.  
  5. 因为目录中还有目录,只要使用同一个列出目录功能的函数完成即可。在列出过程中出现的还是目录的话, 
  6. 还可以再次调用本功能。也就是函数自身调用自身,这种编程手法称为递归。 
  7.  
  8. 注意: 
  9. 1.限定条件 
  10. 2.注意递归的次数,避免内存溢出。 
  11. */  
  12. import java.io.*;  
  13. class FileDemo3   
  14. {  
  15.     public static void main(String[] args)   
  16.     {  
  17.         File dir=new File("d:\\");  
  18.         showDir(dir);  
  19.   
  20.         //toBin(3);//十进制转换为二进制  
  21.         //System.out.println();  
  22.         //System.out.println(getNum(100));//等差数列前N项和  
  23.     }  
  24.       
  25.     public static void showDir(File dir)  
  26.     {  
  27.         System.out.println(dir);  
  28.         File[] files=dir.listFiles();  
  29.         for(int i=0;i<files.length;i++)  
  30.         {  
  31.             if(files[i].isDirectory())  
  32.                 showDir(files[i]);  
  33.             else  
  34.                 System.out.println(files[i]);  
  35.         }  
  36.     }  
  37.       
  38.       
  39.     public static void toBin(int num)//十进制转换为二进制  
  40.     {  
  41.         if(num>0)  
  42.         {  
  43.             toBin(num/2);  
  44.             System.out.print(num%2);  
  45.         }  
  46.     }  
  47.     public static int getNum(int n)//等差数列前N项和  
  48.     {  
  49.         if(n==1)  
  50.             return 1;  
  51.         return n+getNum(n-1);  
  52.     }  
  53. }  


五、IO(列出目录下所有内容-带层次)

[java] view plaincopy
  1. /* 
  2. 列出目录下所有内容-带层次: 
  3. */  
  4. import java.io.*;  
  5. class FileDemo3   
  6. {  
  7.     public static void main(String[] args)   
  8.     {  
  9.         File dir=new File("C:\\Users");  
  10.         showDir(dir,0);  
  11.     }  
  12.     public static String getLevel(int level)  
  13.     {  
  14.         StringBuilder sb=new StringBuilder();  
  15.         sb.append("|---");  
  16.         for(int i=0;i<level;i++)  
  17.         {  
  18.             sb.insert(0,"|   ");  
  19.         }  
  20.         return sb.toString();  
  21.     }  
  22.     public static void showDir(File dir,int level)  
  23.     {  
  24.         System.out.println(getLevel(level)+dir.getName());  
  25.         level++;  
  26.         File[] files=dir.listFiles();  
  27.         for(int i=0;i<files.length;i++)  
  28.         {  
  29.             if(files[i].isDirectory())  
  30.                 showDir(files[i],level);  
  31.             else  
  32.                 System.out.println(getLevel(level)+files[i]);  
  33.         }  
  34.     }  
  35. }  


六、IO(删除带内容的目录)


[java] view plaincopy
  1. /* 
  2. 删除一个带内容的目录: 
  3. 删除原理: 
  4. 在Windows中,删除目录从里面往外删除。 
  5. 既然是从里往外删除,就需要用到递归。 
  6. */  
  7. import java.io.*;  
  8. class RemoveDir   
  9. {  
  10.     public static void main(String[] args)   
  11.     {  
  12.         File dir=new File("e:\\removeText");  
  13.         removeDir(dir);  
  14.     }  
  15.     public static void removeDir(File dir)  
  16.     {  
  17.         File[] files=dir.listFiles();  
  18.         for(int i=0;i<files.length;i++)  
  19.         {  
  20.             if(files[i].isDirectory())  
  21.                 removeDir(files[i]);  
  22.             else  
  23.                 System.out.println(files[i].toString()+"\t文件删除状态:"+files[i].delete());  
  24.   
  25.         }  
  26.         System.out.println(dir+"\t目录删除状态:"+dir.delete());  
  27.           
  28.     }  
  29. }  


七、IO(创建java文件列表)


[java] view plaincopy
  1. /* 
  2. 练习: 
  3.  
  4. 将一个指定目录下的java文件的绝对路径存储到一个文本文件中,也就是建立 
  5. 一个Java文件列表文件。 
  6.  
  7. 思路: 
  8. 1.对指定的目录进行递归。 
  9. 2.获取在递归过程中所有Java文件的路径。 
  10. 3.将这些路径存储到集合中。 
  11. 4.将集合中的数据写入到一个文件中。 
  12.  
  13. */  
  14. import java.io.*;  
  15. import java.util.*;  
  16. class JavaFileList   
  17. {  
  18.     public static void main(String[] args)  
  19.     {  
  20.         File dir=new File("d:\\java");  
  21.         List<File> list=new ArrayList<File>();  
  22.         fileToList(dir,list);  
  23.   
  24.         File file=new File(dir,"javalist.txt");  
  25.         writeToFile(list,file.toString());  
  26.     }  
  27.     public static void fileToList(File dir,List<File> list)  
  28.     {  
  29.         File[] files=dir.listFiles();  
  30.         for(File file:files)  
  31.         {  
  32.             if(file.isDirectory())  
  33.                 fileToList(file,list);  
  34.             else  
  35.             {  
  36.                 if(file.getName().endsWith(".java"))  
  37.                     list.add(file);  
  38.             }  
  39.         }  
  40.     }  
  41.     public static void writeToFile(List<File> list,String javaListFile)   
  42.     {  
  43.         BufferedWriter bufw=null;  
  44.         try  
  45.         {  
  46.             bufw=new BufferedWriter(new FileWriter(javaListFile));  
  47.             for(File f:list)  
  48.             {  
  49.                 String path=f.getAbsolutePath();  
  50.                 bufw.write(path);  
  51.                 bufw.newLine();  
  52.                 bufw.flush();  
  53.             }  
  54.         }  
  55.         catch (IOException e)  
  56.         {  
  57.             throw new RuntimeException("操作文件失败");  
  58.         }  
  59.         finally  
  60.         {  
  61.             try  
  62.             {  
  63.                 if(bufw!=null)  
  64.                     bufw.close();  
  65.             }  
  66.             catch (IOException e)  
  67.             {  
  68.                 throw new RuntimeException("关闭写入流失败");  
  69.             }  
  70.         }  
  71.     }  
  72. }  


八、IO(Properties简述)

PropertiesHashtable的子类,也就是说它具备了Map集合的特点。它里面存储的键值对都是字符串。

是集合中和IO技术相结合的集合容器。

该对象的特点:可以用于键值对形式的配置文件。

那么在加载数据式,需要数据有固定格式:键=

九、IO(Properties存取)


[java] view plaincopy
  1. /* 
  2. Properties存取: 
  3. */  
  4. import java.io.*;  
  5. import java.util.*;  
  6. class PropertiesDemo   
  7. {  
  8.     public static void main(String[] args)   
  9.     {  
  10.         setAndGet();  
  11.     }  
  12.     public static void setAndGet()  
  13.     {  
  14.         Properties prop=new Properties();  
  15.         prop.setProperty("zhangsan","20");  
  16.         prop.setProperty("lisi","39");  
  17.   
  18.         System.out.println(prop);  
  19.         System.out.println(prop.getProperty("lisi"));  
  20.           
  21.         prop.setProperty("lisi","43");  
  22.         Set<String> names=prop.stringPropertyNames();  
  23.         for(String s:names)  
  24.         {  
  25.             System.out.println(s+":"+prop.getProperty(s));  
  26.         }  
  27.     }  
  28. }  


十、IO(Properties存取配置文件)


[java] view plaincopy
  1. /* 
  2. Properties存取: 
  3.  
  4. 想要将info.txt中键值数据存入到集合中进行操作。 
  5. 1.用一个流和info.txt文件关联。 
  6. 2.读取一行数据,将该行数据用"="号进行切割。 
  7. 3.等号左边作为键,右边作为值。存入到Properties集合中。 
  8. */  
  9. import java.io.*;  
  10. import java.util.*;  
  11. import java.io.*;  
  12. class PropertiesDemo   
  13. {  
  14.     public static void main(String[] args)throws IOException  
  15.     {  
  16.         //setAndGet();  
  17.         //method_1();  
  18.         loadDemo();  
  19.     }  
  20.     public static void loadDemo()throws IOException  
  21.     {  
  22.         Properties prop=new Properties();  
  23.         FileInputStream fis=new FileInputStream("info.txt");  
  24.   
  25.         //将流中的数据加载进集合。  
  26.         prop.load(fis);  
  27.         prop.setProperty("wangwu","21");  
  28.   
  29.         FileOutputStream fos=new FileOutputStream("info.txt");  
  30.         prop.store(fos,"abc");//第二个参数:注释信息  
  31.         //System.out.println(prop);  
  32.         prop.list(System.out);  
  33.         fos.close();  
  34.     }  
  35.     public static void method_1()throws IOException  
  36.     {  
  37.         BufferedReader bufr=new BufferedReader(new FileReader("info.txt"));  
  38.         String line=null;  
  39.         Properties prop=new Properties();  
  40.         while((line=bufr.readLine())!=null)  
  41.         {  
  42.             String[] arr=line.split("=");  
  43.             //System.out.println("键:"+arr[0]+"\t值:"+arr[0]);  
  44.             prop.setProperty(arr[0],arr[1]);  
  45.         }  
  46.         bufr.close();  
  47.   
  48.         System.out.println(prop);  
  49.     }  
  50.     public static void setAndGet()  
  51.     {  
  52.         Properties prop=new Properties();  
  53.         prop.setProperty("zhangsan","20");  
  54.         prop.setProperty("lisi","39");  
  55.   
  56.         System.out.println(prop);  
  57.         System.out.println(prop.getProperty("lisi"));  
  58.           
  59.         prop.setProperty("lisi","43");  
  60.         Set<String> names=prop.stringPropertyNames();  
  61.         for(String s:names)  
  62.         {  
  63.             System.out.println(s+":"+prop.getProperty(s));  
  64.         }  
  65.     }  
  66. }  


十一、IO(Properties练习)


[java] view plaincopy
  1. /* 
  2. 用于记录应用程序运行次数。 
  3. 如果使用次数已到,那么给出注册提示。 
  4.  
  5. 很容易想到:计数器。 
  6. 课时该计数器定义在程序中随着程序的运行而在内存中存在,并进行自增。 
  7. 可是随着该应用程序的退出,计数器也在内存中消失了,下次再启动该程序, 
  8. 该计数器也在内存中消失了。 
  9. 下一次再启动该程序,又重新开始从0计数。 
  10. 程序即使结束,该计数器的值也存在,下次程序启动在会先加载该计数器的值并加1后再重新 
  11. 存储起来。所以要建立一个配置文件,用于记录该软件的使用次数。 
  12.  
  13. 该配置文件使用键值对的形式,这样便于阅读数据并操作数据。 
  14. 键值对数据是Map集合。数据是以文件形式相结合,使用IO技术,那么 Map+IO --> Properties 
  15.  
  16. 配置文件可以实现应用程序数据的共享。 
  17.  
  18. */  
  19. import java.io.*;  
  20. import java.util.*;  
  21. class RunCount   
  22. {  
  23.     public static void main(String[] args)throws IOException   
  24.     {  
  25.         Properties prop=new Properties();  
  26.         File file=new File("count.ini");  
  27.         if(!file.exists())  
  28.             file.createNewFile();  
  29.         FileInputStream fis=new FileInputStream(file);  
  30.           
  31.         prop.load(fis);  
  32.   
  33.         int count=0;  
  34.         String value=prop.getProperty("time");  
  35.         if(value!=null)  
  36.         {     
  37.             count=Integer.parseInt(value);  
  38.             if(count>=3)  
  39.             {  
  40.                 System.out.println("您好,试用次数已到。");  
  41.                 return;  
  42.             }  
  43.               
  44.         }  
  45.   
  46.         count++;  
  47.         prop.setProperty("time",count+"");  
  48.         FileOutputStream fos=new FileOutputStream(file);  
  49.         prop.store(fos,"");  
  50.     }  
  51. }  



十二、IO(PrintWriter)

打印流:

PrintWriterPrintStream

可以直接操作输入流和文件。


[java] view plaincopy
  1. /* 
  2. 打印流: 
  3. 该流提供了打印方法,可以将各种数据类型的数据都原样打印。 
  4.  
  5. 字节打印流: 
  6. PrintStream: 
  7. 构造函数可以接受的参数类型: 
  8. 1.file对象。File 
  9. 2.字符串路径。String 
  10. 3.字节输出流。OutputStream 
  11.  
  12. 字符打印流: 
  13. PrintWriter: 
  14. 构造函数可以接受的参数类型: 
  15. 1.file对象。File 
  16. 2.字符串路径。String 
  17. 3.字节输出流。OutputStream 
  18. 4.字符输出流。Writer 
  19.  
  20. */  
  21. import java.io.*;  
  22. class PrintStreamDemo   
  23. {  
  24.     public static void main(String[] args)throws IOException  
  25.     {  
  26.         BufferedReader bufr=new BufferedReader(new InputStreamReader(System.in));  
  27.         PrintWriter out=new PrintWriter(new FileWriter("a.txt"),true);//true:刷新缓冲区  
  28.   
  29.         String line=null;  
  30.         while((line=bufr.readLine())!=null)  
  31.         {  
  32.             if("over".equals(line))  
  33.                 break;  
  34.             out.println(line.toUpperCase());  
  35.             //out.flush();  
  36.         }  
  37.         out.close();  
  38.         bufr.close();  
  39.     }  
  40. }  


十三、IO(合并流)

序列流:

SequenceInputStream:对多个流进行合并。


[java] view plaincopy
  1. /* 
  2. SequenceInputStream:对多个流进行合并。 
  3. */  
  4. import java.io.*;  
  5. import java.util.*;  
  6. class SequenceDemo   
  7. {  
  8.     public static void main(String[] args)throws IOException   
  9.     {  
  10.         Vector<FileInputStream> v=new Vector<FileInputStream>();  
  11.         v.add(new FileInputStream("e:\\1.txt"));  
  12.         v.add(new FileInputStream("e:\\2.txt"));  
  13.         v.add(new FileInputStream("e:\\3.txt"));  
  14.   
  15.         Enumeration<FileInputStream> en=v.elements();  
  16.   
  17.         SequenceInputStream sis=new SequenceInputStream(en);  
  18.         FileOutputStream fos=new FileOutputStream("e:\\4.txt");  
  19.   
  20.         byte[] buf=new byte[1024];  
  21.   
  22.         int len=0;  
  23.         while((len=sis.read(buf))!=-1)  
  24.         {  
  25.             fos.write(buf,0,len);  
  26.         }  
  27.         fos.close();  
  28.         sis.close();  
  29.   
  30.     }  
  31. }  


十四、IO(切割文件)

[java] view plaincopy
  1. /* 
  2. 切割,合并mp3文件: 
  3.  
  4. */  
  5. import java.io.*;  
  6. import java.util.*;  
  7. class SplitFile   
  8. {  
  9.     public static void main(String[] args)throws IOException   
  10.     {  
  11.         splitFile();  
  12.         merge();  
  13.     }  
  14.     public static void splitFile()throws IOException//切割  
  15.     {  
  16.         FileInputStream fis=new FileInputStream("e:\\1.mp3");  
  17.         FileOutputStream fos=null;  
  18.   
  19.         byte[] buf=new byte[1024*1024];  
  20.         int len=0;  
  21.         int count=1;  
  22.         while((len=fis.read(buf))!=-1)  
  23.         {  
  24.             fos=new FileOutputStream("e:\\splitfiles\\"+(count++)+".part");  
  25.             fos.write(buf,0,len);  
  26.             fos.close();  
  27.         }  
  28.         fis.close();  
  29.     }  
  30.     public static void merge()throws IOException //合并  
  31.     {  
  32.         ArrayList<FileInputStream> a1=new ArrayList<FileInputStream>();  
  33.         for(int i=1;i<=4;i++)  
  34.         {  
  35.             a1.add(new FileInputStream("e:\\splitfiles\\"+i+".part"));  
  36.         }  
  37.   
  38.         final Iterator<FileInputStream> it=a1.iterator();  
  39.         Enumeration<FileInputStream> en=new Enumeration<FileInputStream>(){  
  40.             public boolean hasMoreElements()  
  41.             {  
  42.                 return it.hasNext();  
  43.             }  
  44.             public FileInputStream nextElement()  
  45.             {  
  46.                 return it.next();  
  47.             }         
  48.         };  
  49.   
  50.         SequenceInputStream sis=new SequenceInputStream(en);  
  51.   
  52.         FileOutputStream fos=new FileOutputStream("e:\\splitfiles\\0.mp3");  
  53.         byte[] buf=new byte[1024];  
  54.         int len=0;  
  55.         while((len=sis.read(buf))!=-1)  
  56.         {  
  57.             fos.write(buf,0,len);  
  58.         }  
  59.         fos.close();  
  60.         sis.close();  
  61.     }  
  62. }  



0 0