JAVASE----15----IO流_2

来源:互联网 发布:linux系统cpu使用率 编辑:程序博客网 时间:2024/05/21 11:10
File类
·用来将文件或文件夹封装成对象
·方便对文件与文件夹的属性信息进行操作。

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

package IO2;import java.io.File;import java.io.IOException;public class FileDemo {/** * File 类的常见方法 * 1,创建。 * boolean  createNewFile():在指定位置创建文件,如果该文件已经存在,则不创建,返回false。 * 和输出流不一样,输出流一建立创建文件,而且文件已经存在,会覆盖。 * boolean mkdir() 创建文件夹 * boolean mkdis() 创建多级文件夹 * *2,删除 *boolean  delete()  删除失败返回假 *void   deleteOnExit(); 在程序退出时删除指定文件 * *3,判断 *boolean exists():文件是否存在 *isFile(); *isDirectory(); *isHidden(); //测试是否为隐藏文件 * *4,获取信息 *getName(); *getPath(); *getParent(); *getAbsolutePath() *lastModified()  //文件最后一次修改的时间 *length() * */public static void main(String[] args) throws IOException {method_4();}//创建File对象public static void consMethod(){//将a.txt封装成file对象。可以将已有的和未出现的文件或者文件夹封装成对象File f1=new File("a.txt");File f2=new File("c:\\abc","b.txt");File d=new File("c:\\abc");File f3=new File(d,"c.txt");//跨平台File f4=new File("c:"+File.separator+"abc"+File.separator+"a.txt");}public static void method() throws IOException{File f1=new File("FileDemo.java");  System.out.println(f1.createNewFile()); //第一次调用true                                                //第二次调用falseSystem.out.println(f1.exists());  //f1.deleteOnExit(); }public static void method_2() throws IOException{//创建文件夹File dir=new File("abc"); System.out.println(dir.mkdir());}public static void method_3() throws IOException{File f=new File("abc.txt");f.createNewFile(); System.out.println(f.isFile());  //true}public static void method_4() throws IOException{File f=new File("abc.txt");//f.createNewFile(); System.out.println("path:"+f.getPath());  //abc.txt System.out.println("abspath:"+f.getAbsolutePath());  //D:\Android\workspace\File\abc.txt System.out.println("parent:"+f.getParent()); //null  //该方法是返回绝对路径中的父目录。 //如果想对路径中有上一层目录那么该目录就是返回结果}}


package IO2;import java.io.File;import java.io.FilenameFilter;public class FileDemo2 {/** * @param args */public static void main(String[] args) {File dir=new File("D:\\photo");//过滤File[] files=dir.listFiles(new FilenameFilter() {@Overridepublic boolean accept(File arg0, String arg1) {// TODO Auto-generated method stubreturn arg1.endsWith(".jpg");}}); for(File name : files) { System.out.println(name); }}public static void  listRootsDemo(){File[] files=File.listRoots();for(File f: files){System.out.println(f);//C:\//D:\//E:\//F:\//G:\}}public static void listDemo(){File f=new File("c:\\"); //调用list方法的file对象必须是封装了一个目录。该目录必须存在。String []names=f.list();for(String name : names){System.out.println(name);}//把C盘的文件和文件夹打印}}


package IO2;import java.io.File;public class FileDemo3 {/** * 列出指定目录下文件或者文件夹,包含子目录中的类容。 * 也就是列出指定目录下的所有类容 *  * 因为目录中还有目录,只要使用同一个列出目录功能的函数完成即可。 * 在列出过程中出现的还是目录的话,还可以再次调用本功能,也就是函数自身调用自身。 * 这种表现形式,或者变成手法,称为递归。 */public static void main(String[] args) {File dir=new File("e:\\");//showDir(dir);toBin(6); //110System.out.println(getSum(6)); //21}public static void showDir(File dir){System.out.println(dir);File[] files=dir.listFiles();for(int x=0;x<files.length;x++){if(files[x].isDirectory()) showDir(files[x]);elseSystem.out.println(files[x]);}}//递归演示: 修改以前的2进制方法,public static void toBin(int num){if(num>0){toBin(num/2);System.out.println(num%2);}}//求和,数字太大会产生内存溢出public static int getSum(int n){if(n==1)return 1;return n+getSum(n-1);}//递归要注意:1 限制条件 2,递归的次数,尽量避免内存溢出。}



删除目录:



package IO2;import java.io.File;public class RemoveDir {/** *删除一个带内容的目录 *删除原理:在windows中,删除目录从里面往外删除的。 *既然是从里往外删除,就需要用到递归。 */public static void main(String[] args) {File f=new File("C:\\haha");removedir(f);//C:\haha\haha.mp3::true//C:\haha\nihao\asdasd::true//C:\haha\nihaodir::true//C:\hahadir::true}public static void  removedir(File dir){File []files=dir.listFiles();for(int x=0;x<files.length;x++){if((!files[x].isHidden())&&files[x].isDirectory()){removedir(files[x]);}elseSystem.out.println(files[x].toString()+"::"+files[x].delete());}System.out.println(dir+"dir::"+dir.delete());}}


建立一个JAVA文件列表文件:

/*建立一个JAVA文件列表文件。思路:1,对指定的目录进行递归2,获取递归过程所有的java文件路径3,将这些路径存储到集合中4,将集合中的数据存储到文件中*/package IO2;import java.io.BufferedWriter;import java.io.File;import java.io.FileWriter;import java.io.IOException;import java.util.ArrayList;import java.util.List;public class JavaFileList {public static void main(String[] args) {      File  dir=new File("C:\\Documents and Settings\\Administrator\\桌面\\文档\\JAVA\\代码");      List<File> list=new ArrayList<File>();      fileToList(dir,list);      System.out.print(list.size());//48      File file=new File(dir,"javalist.txt");      writeToFile(list,file.toString()); //成功copy}public static void fileToList(File dir,List<File> list){File[] files=dir.listFiles();for(File file :files){if(file.isDirectory())fileToList(file,list);else{if(file.getName().endsWith(".java"))list.add(file);}}}public static void writeToFile(List<File>list,String javaListFile){BufferedWriter bufw=null;try {bufw=new BufferedWriter(new FileWriter(javaListFile));for(File f:list){String path=f.getAbsolutePath();bufw.write(path);bufw.newLine();bufw.flush(); }} catch (IOException e) {e.printStackTrace();}finally{try{if(bufw!=null)bufw.close();} catch (IOException e) {e.printStackTrace();}}}}


下面再说下properties

properties是hashtable的子类。也就是说他具备map集合的特点。而且它里面存储的兼职都是字符串

是集合中和IO技术相结合的容器,该对象的特点:可以用于键值对形式的配置文件。在加载数据时,
需要数据有固定格式:健=值

package IO2;import java.io.BufferedReader;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.FileReader;import java.io.IOException;import java.util.Properties;import java.util.Set;public class propertiesDemo {/** * @param args * @throws IOException  */public static void main(String[] args) throws IOException {setAndGet(); //zhangsan:20//lisi:80method();//{zhangsan=20, lisi=50, wangwu=80}loadDemo();//-- listing properties --//zhangsan=20//lisi=50//wangwu=80}//设置和获取元素public static void setAndGet(){Properties prop=new Properties();prop.setProperty("zhangsan", "20");prop.setProperty("lisi", "21");String value=prop.getProperty("zhangsan");//System.out.println(value);prop.setProperty("lisi","80");Set<String> name =prop.stringPropertyNames();for(String na:name){System.out.println(na+":"+prop.getProperty(na));}}/*如何将流中的数据存储到集合中。 * 想要将info.txt中键值数据存到集合中进行操作。 * 1,用一个流和info.txt文件关联。 * 2,读取一行数据,将该行数据用“=”进行切割 * 3,等号左边作为建,右边作为值,存入到Properties 集合中即可 */public static void method() throws IOException{BufferedReader buf=new BufferedReader(new FileReader("info.txt"));String line=null;Properties prop=new Properties();while((line=buf.readLine())!=null){String []arr=line.split("=");System.out.println(line);prop.setProperty(arr[0], arr[1]);}buf.close();System.out.println(prop);}//其实内部已经封装完了上面的方法loadpublic static void loadDemo() throws IOException{Properties prop=new Properties();FileInputStream fis=new FileInputStream("info.txt");prop.load(fis);prop.setProperty("zhangsan", "88");FileOutputStream fos=new FileOutputStream("info.txt");prop.store(fos, "haha"); //添加注释信息。 # 开头prop.list(System.out);fos.close();fis.close();}}


package IO2;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.util.Properties;public class RunCount {/** *需求:用于记录应用程序运行次数,如果使用次数已到,那么给出注册提示。 *很容易想到是:计数器。 *可是计数器在定义在程序中,随着程序的运行而在内存中存在,并进行自增。 *可是随着该应用程序的退出,该技术器也在内存中消失了。下一次再启动该程序, *下一次启动改程序,又重新开始从0计数。 *程序即使计数,该计数器的值也存在,下次程序启动会先加载该计数器的值,并加1后重新存储起来。 * *所以要建立一个配置文件,用于记录该软件的配置信息。 *该配置文件使用键值对形式,这样便于阅读数据,并操作数据。 *键值对数据是map集合,数据是以文件形式存储,使用io技术,那么 *map+io-->properties *配置文件可以实现应用程序的共享。 * @throws IOException  */public static void main(String[] args) throws IOException {    Properties prop=new Properties();    File file=new File("count.ini");    if(!(file.exists()))    file.createNewFile();        FileInputStream fis=new FileInputStream(file);    prop.load(fis);    int count=0;    String value=prop.getProperty("time");    if(value!=null)    {    count=Integer.parseInt(value);    if(count>=5)    {    System.out.println("您好,使用次数已到,请注册。");    return;    }    }    count++;    prop.setProperty("time", count+"");    FileOutputStream  fos=new FileOutputStream(file);    prop.store(fos, "次数");    fos.close();    fis.close();}}

/* 打印流:可以直接操作输入流和文件 PrintStream   构造函数可以接受的参数类型: 1,file对象。File 2,字符串路径。 String 3,字节输出流。OutputStream   字符打印流:  PrintWriter  构造函数可以接受的参数类型:  1,file对象。File 2,字符串路径。 String 3,字节输出流。OutputStream 4,字符数输出流  Writer。 */package IO2;import java.io.BufferedReader;import java.io.FileWriter;import java.io.IOException;import java.io.InputStreamReader;import java.io.PrintWriter;public class PrintStreamDemo {/** * @param args */public static void main(String[] args) throws IOException {BufferedReader bufr=new BufferedReader(new InputStreamReader(System.in));//PrintWriter out=new PrintWriter(System.out,true);//加true ln会自动刷新PrintWriter out=new PrintWriter(new FileWriter("fsdf.txt"),true); //自动刷新String line=null;while((line=bufr.readLine())!=null){if("over".equals(line))break;out.println(line.toUpperCase());//out.flush();}out.close();bufr.close();}}


//序列流:合并流package IO2;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.SequenceInputStream;import java.util.Enumeration;import java.util.Vector;public class SequenceDemo {public static void main(String[] args) throws Exception {Vector<FileInputStream> v = new Vector<FileInputStream>();v.add(new FileInputStream("c:\\1.txt"));v.add(new FileInputStream("c:\\2.txt"));v.add(new FileInputStream("c:\\3.txt"));Enumeration<FileInputStream> en=v.elements();SequenceInputStream  sis=new SequenceInputStream(en);FileOutputStream fos=new FileOutputStream("c:\\4.txt");byte[] buf=new byte[1024];int len=0;while((len=sis.read(buf))!=-1){fos.write(buf, 0, len);}fos.close();sis.close();}}


package IO2;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.io.SequenceInputStream;import java.util.ArrayList;import java.util.Enumeration;import java.util.Iterator;public class SpliteFile {/** * 文件切割 * @throws IOException  */public static void main(String[] args) throws IOException {//splitfile(); merge();}//切割public static void splitfile() throws IOException{FileInputStream fis=new FileInputStream("c:\\haha.mp3");FileOutputStream fos=null;byte[]buf=new byte[1024*1024];int len=0;int count=1;while(((len=fis.read(buf))!=-1)){fos=new FileOutputStream("c:\\"+(count++)+".part");fos.write(buf,0,len);fos.close();}fis.close();}//合并public static void  merge() throws IOException{ArrayList<FileInputStream> al=new ArrayList<FileInputStream>();for(int x=1;x<=6;x++){al.add(new FileInputStream("c:\\"+x+".part"));}final Iterator<FileInputStream> it=al.iterator();Enumeration<FileInputStream> en= new Enumeration<FileInputStream>() {@Overridepublic FileInputStream nextElement() {return  it.next();}@Overridepublic boolean hasMoreElements() {// TODO Auto-generated method stubreturn  it.hasNext();}};SequenceInputStream  sis=new SequenceInputStream(en);FileOutputStream fos=new FileOutputStream("c:\\0.mp3");byte[] buf=new byte[1024];int len=0;while((len=sis.read(buf))!=-1){fos.write(buf, 0, len);}fos.close();sis.close();}}



 至此,IO流讲述完毕