黑马程序员——File类及其常见操作

来源:互联网 发布:如何评价阿凡达 知乎 编辑:程序博客网 时间:2024/05/20 00:51
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

一、File概述

File的英文释义是文件,顾名思义,File即是用于描述文件对象的一个包装类,封装了各种操作文件或者文件夹的方法供开发人员使用。

二、File类的常用方法
File file = new File("C:\\hahaha.txt");//关联文件,把文件封装成对象//创建文件file.creatNewFile();//创建文件实体file.mkdir();//创建文件夹实体file.mkdirs();//创建多级目录文件夹实体//删除文件file.delete();file.deleteOnExit();//程序结束时删除文件//判断文件file.exists();    //文件是否存在file.isDirectory();//文件是否为文件夹file.isFile();     //文件是否为文件file.isHidden()file.isAbsolute()canExecute()      //是否可以执行canRead()canWrite()//获取文件信息file.length();file.listFiles();//当file为目录文件夹时file.getName()file.getParent();file.getPath();file.getAbsolutePath();//longfile.lastModified()  //返回文件最后一次被修改的时间 longfile.renameTo()//文件列表File.listRoots() //静态方法,返回File[] files,根盘符数组File f = new File("c:\\");f.list()   //返回的是File的名称,字符串。当f不是文件夹时返回null。f.list(FilenameFilter f) //返回所有限定条件的文件名,字符串。f.listFiles()  //返回的是File[] ,具体对象。


三、练习题

1列出E盘下某文件夹内的所有jtxt文件到控制台
package com.itheima;import java.io.File;import java.io.FilenameFilter;class Demo{public static void main(String[] args){File f = new File("e:\\");//将文件夹封装成对象String[] str = f.list(new FilenameFilter(){ //调用带过滤器的list方法public boolean accept(File f,String s){return s.endsWith(".txt");}});for(int x=0;x<str.length;x++){    //将得到的文件名打印在控制台System.out.println(str[x]);}}}


2列出一个目录下的所有内容,包括子目录的内容(带层次),到控制台。
package com.itheima;import java.io.File;class Demo{public static void main(String[] args){File dir =new File("e:\\360yasuo");showDir(dir,0);}//封装一个分级展示目录内容的方法public static void showDir(File dir,int level){System.out.println(method(level)+dir.getName());level++;File[] files=dir.listFiles();for(int x=0;x<files.length;x++){if(files[x].isDirectory())//如果目录下有文件夹,则递归,继续列出文件夹下的内容showDir(files[x],level);else{  //如果遍历到的是文件,则直接打印到输出台。System.out.println(method(level)+files[x].getName());}}}//封装一个用于分级的方法,分级的本质就是在字符串前面加空格public static String method(int level){StringBuilder sb = new StringBuilder();for(int x=0;x<level;x++){sb.append("  ");}return sb.toString();}}

3删除带内容的目录
/* * 需求:删除e盘下1234文件夹及其所有内容 */package com.itheima;import java.io.File;class Demo{public static void main(String[] args){//把目标文件夹封装成对象 File dir = new File("e:\\3234");//对该文件夹进行删除操作deleDir(dir);}//封装一个用于删除文件夹及其内容的方法public static void deleDir(File dir){File[] files=dir.listFiles();for(int x=0;x<files.length;x++){ // 遍历文件夹中的内容if(files[x].isDirectory())   //如果是文件夹,则递归,继续删除操作deleDir(files[x]);else{                        //如果是文件,则直接删除files[x].delete();}}dir.delete();  //将空的目标文件删除}}


4将指定目录下的所有文件的绝对路径名,存到一个文本文件中
/* * 需求:将e盘下1234文件夹的所有文件的绝对路径名,存到一个文本文件中 * 思路: * 1.把1234文件夹封装成一个File对象 * 2.利用file对象的操作方法得到绝对路径名 * 3.利用输出流将路径名存到文本文件中 */package com.itheima;import java.io.BufferedWriter;import java.io.File;import java.io.FileWriter;import java.io.IOException;class Demo{public static void main(String[] args){//定义一个输出流对象缓冲区,提高数据传输效率BufferedWriter bufw =null;try{//定义输出流对象并关联到文本文件bufw =new BufferedWriter(new FileWriter("e:\\456.txt"));File dir =new File("e:\\1234");//把1234文件夹封装成对象File[] files=dir.listFiles();for(int x=0;x<files.length;x++){//遍历1234文件夹的内容String s =files[x].getAbsolutePath();bufw.write(s);    //将遍历到的文件的绝对路径写入文本文件bufw.newLine();bufw.flush();}}catch(IOException e){throw new RuntimeException("生成文件失败");}finally   //关闭输出流{try{if(bufw!=null)bufw.close();}catch(IOException e){throw new RuntimeException("输出流关闭失败");}}}}

四、存取配置文件
创建一个配置文件,用于记录软件使用的次数,如果使用次数达到5次,提示用户注册缴费。
/* * 需求:创建一个配置文件,用于记录软件使用的次数,如果使用次数达到5次,提示用户注册缴费。 * 思路: * 1.在硬盘上创建一个文件用于记录信息 * 2.创建输入流和输出流用于在内存和配置文件之间传递数据 * 3.创建properties集合,读取配置文件信息 * 4.在prop内更改信息并将更改后的结果保存到配置文件 */package com.itheima;import java.io.File;import java.io.FileInputStream;import java.io.FileWriter;import java.util.Properties;class Demo{public static void main(String[] args)throws Exception{//将配置文件封装成对象File f =new File("e:\\count.properties");if(!f.exists())f.createNewFile();FileInputStream fis = new FileInputStream(f);//创建一个输入流,用于读取配置文件Properties prop = new Properties();//定义一个集合,用于处理更改配置文件的信息prop.load(fis);//将配置文件的信息通过流加载进内存int count = 0;String value = prop.getProperty("times");if(value!=null)count = Integer.parseInt(value);if(count>=5)System.out.println("试用次数已到,请注册缴费");count++;prop.setProperty("times", count+"");//每用一次,在内存中更改使用次数FileWriter fw = new FileWriter(f);    prop.store(fw, "");//将更改后的使用次数保存到配置文件    fw.close();//关闭流}}


五、printWriter和printStream
打印流,输出流的一种,强大之处在于提供了println方法,能将各种数据原样打印出来。。。System.out中的out就是printStream的类对象。
printStream构造函数可以接收的参数类型:File对象,字符串路径,字节输出流。
printWriter构造函数可以接收的参数类型:File对象,字符串路径,字节输出流,字符输出流。

六、合并文件和切割文件
 
/* * 需求:将e盘下的txt文件合并到一个文本文件中 * 思路: * 1.利用SequenceInputStream合并输入流 * 2.创建一个输出流,将数据写到指定文本文件中 */package com.itheima;import java.io.BufferedInputStream;import java.io.BufferedOutputStream;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.io.SequenceInputStream;import java.util.Enumeration;import java.util.Vector;class Demo{public static void main(String[] args)throws IOException{//创建集合vector ,用于生成Enumeration参数Vector v = new Vector();v.add(new FileInputStream("e:\\1.txt"));v.add(new FileInputStream("e:\\2.txt"));v.add(new FileInputStream("e:\\3.txt"));Enumeration e = v.elements();//将三个输入流合成一个流SequenceInputStream sis = new SequenceInputStream(e);BufferedInputStream bufis =new BufferedInputStream(sis);//创建一个输出流,用于往目的存储数据FileOutputStream fos = new FileOutputStream("e:\\4.txt");BufferedOutputStream bufos = new BufferedOutputStream(fos);int by = 0;while((by=sis.read())!=-1){//循环读取和写入,完成存储bufos.write(by);}//关闭流sis.close();bufos.close();}}


/* * 需求:将e盘下的1.jpg文件切割成三部分 * 思路: * 1.创建一个字节读取流,用于读取文件数据 * 2.每读取一部分就放到byte[]中,此时再创建输出流并把数据写入文件 */package com.itheima;import java.io.BufferedInputStream;import java.io.BufferedOutputStream;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;class Demo{public static void main(String[] args)throws IOException{//创建字节输入流,并关联到文件FileInputStream fis= new FileInputStream("e:\\1.jpg");BufferedInputStream bufis = new BufferedInputStream(fis);//定义缓冲区字节数组byte[] buf = new byte[1024*512];int len =0;int count =1;while((len=bufis.read(buf))!=-1){ //循环读取源文件//输入流每装满一次缓冲区,就创建一个输出流来接收缓冲区数据FileOutputStream fos = new FileOutputStream("e:\\"+(count++)+".part");BufferedOutputStream bufos = new BufferedOutputStream(fos);bufos.write(buf, 0, len);bufos.close();}//关闭读取源文件的输入流bufis.close();}}


0 0