首页 > 代码库 > 黑马程序员——Java基础——IO流(2)——File
黑马程序员——Java基础——IO流(2)——File
第一讲 File类
1、概念:
File类对象可以对比一个路径,此路径可以是文件也乐意是文件夹,该类方法可以对这个路径进行各种操作
2、创建对象:
给File类构造函数传递一个String类型的路径可以创建对象
路径分为两种:相对路径和绝对路径
*相对路径:从盘符开始,是一个固定的路径
*绝对路径:不从盘符开始,相对于某个位置开始,日在Eclipse中的java工厂如果使用相对路径,那么就相当于工程根目录,cmd则相对应与当前目录
实例:
1 // 法1 2 File f=new File("t.txt"); 3 // 与这个路径相关联,假如没有该文件也不会创建 4 // 法2 5 File f2=new File("D:\\aa","b.txt"); 6 // 前面参数数目录路径,后面是文件名 7 // 法3 8 File d=new File("D:\\pp"); 9 File f3=new File(d,"c.txt");10 // 注:跨平台的分割符,File.sparator
3.File的常用方法:
1 boolean createNewFile():创建一个文件,存在测返回false 2 boolean mkdie():创建一个文件夹,最多一级 3 boolean mkdies():创建一个文件夹,可以多级 4 5 boolean delete():删除 6 7 8 ******boolean exists():判断是否存在 9 boolean isAbsulute(); 是否是绝对路径10 boolean isDirectory(); 是否是文件夹11 boolean isFile(); 是否是文件12 boolean isHidden(); 是否隐藏13 // 记住:在判断文件对象是否是文件或目录是,必须先判断是否存在(使用exists)14 15 String getName():获得文件名16 String getPath:获得相对路径17 String Parent()获得文件父目录18 String getAbsolutely();获得绝对路径19 long length():获得文件长度20 21 22 重点掌握:23 String[] list():列出当前所以文件,得到这些文件的数组24 String[] list(FilenameFilter filter)25 返回一个字符串数组,获得目录中满足过滤器的文件或目录26 27 File[] listFiles()28 String[] ListFile(FilenameFilter filter)返回抽象路径数组,获取满足目录中指定过滤器的文件或目录
4、文件过来器用法:(关键字:list ,FilenameFilter(),复写accept(file,name),endwith(String))
1 /*练习:用String[] list(filenameFilter filter)方法获取一个目录下所有的.java文件 2 * 思路:1、FilenameFilter是一个过滤器接口,用匿名内部类传入filter对象 3 * 2、复写accept(file,name)方法,判断name是否为java 4 * 3、变量String 5 */ 6 import java.io.*; 7 public class getJavaFile { 8 public static void main(String[] args){ 9 File file=new File("F:");10 getJavaFiel(file);11 }12 //获得hava文件13 private static void getJavaFiel(File file) {14 String[] javaFile=file.list(new FilenameFilter(){15 // 复写accept参数是需要变量的文件,和名字16 public boolean accept(File file,String name){17 return name.endsWith(".java");//后缀名为.java18 }19 });20 System.out.println(javaFile.length);21 // 遍历数组22 for(String s:javaFile){23 System.out.println(s);24 }25 }26 }
5、结合递归方法列出指定目录下问价或文件夹
1 import java.io.*; 2 public class recursDemo { 3 public static void main(String[] args){ 4 File dir=new File("D:\\media"); 5 6 allFileList(dir,0); 7 } 8 // 列出指定目录下的所有内容 9 private static void allFileList(File dir, int i) {10 // i主要是为了确定在哪一级的目录11 // 根据i的值有层次的输出12 System.out.println(getLevel(i)+dir);13 i++;14 // 获得所有路径15 File[] fileAll=dir.listFiles();16 // 遍历17 for(File file:fileAll){18 if(file.isDirectory()){19 // 如果是目录说明还需要继续调用20 allFileList(file,i);21 }else{22 System.out.println(getLevel(i)+file);23 }24 25 }26 }27 28 // 根据i的大小确定多少级29 private static String getLevel(int i) {30 StringBuilder sb=new StringBuilder();31 sb.append("|){33 sb.insert(0, ""+dir.delete());20 }21 }
实例3:
将指定目录下java文件的绝对路径存储在疑问文本文件上
1、对指定的目录进行递归
2、获得java文件的路径
3、将路径存储在集合
4、将集合中的数据写入一个文件中
1 /* 2 * 删除文件是由内而外的,所以需要用递归 3 */ 4 import java.io.*; 5 import java.util.*; 6 public class RemoveDir { 7 public static void main(String[] args)throws Exception{ 8 File dir=new File("D:\\java源码"); 9 10 // 用于存储的集合容器11 List<File> list =new ArrayList<File>(); 12 fileToList(dir,list);13 // 使得list装满了路径文件14 File file=new File(dir,"javafilelist.txt"); ; 15 writeToFile(list,file);16 }17 // 获取指定文件夹内的所有java文件的绝对路径,并存入集合中 18 public static void fileToList(File dir,List<File> list) 19 { 20 File[] files=dir.listFiles();//列出dir路径下的所以文件和目录, 21 //遍历 22 for (File file : files) 23 { 24 //如果是目录,则继续获取 25 if(file.isDirectory()) 26 { 27 list.add(file.getAbsoluteFile());//把父目录路径也存入 28 fileToList(file,list); 29 } 30 //将是.java文件的绝对路径存入 31 else if(file.getName().endsWith(".java")) 32 list.add(file); 33 } 34 } 35 public static void writeTolist(List<File> list,File fi)throws Exception{36 37 BufferedWriter bufw=new BufferedWriter(new FileWriter(fi));38 for(File f:list){//注意集合时可以直接39 bufw.write(fi.getAbsolutePath());40 bufw.newLine();41 bufw.flush();42 }43 bufw.close();44 }45 46 }
第二讲 Properties
一、概述:
Properties是Hashtable的子类,它具备Map集合的特点
特点:
用于键值对形式的配置文件;加载时的固定格式是:key=value
1)常用方法
setProperyy(K,V):设置键值
getProperty(K):由键的值
Set<String> stringPropertyName();返回键值集合
重点难点:加载流和存入流
void load(InputStream is,)
//从输入字节流中读取属性列表(键和值)
void load(Reader reader)
//从字符流中读取属性列表(键和值)
void list(PrintStream out)将属性列表红素出道指定的流中
void store(OutputSstream out,String s):
对应load(InputStream)将属性列表希尔输出流
实例
演示把文件中数据存储到Properties集合中(关键使用String 方法中split将=切开为arr[0]和arr[1],在分别存入Properties)
public static void method()throws Exception { //使用字符读取缓冲流关联文件 BufferedReader bufr = new BufferedReader(new FileReader("info.txt")); String line = null; //定义Properties集合 Properties prop = new Properties(); while((line=bufr.readLine())!=null) { String[] arr = line.split("=");//将一行数据以“=”号进行分割 //将=左边作为键存入,将=右边作为值存入 prop.setProperty(arr[0],arr[1]); } bufr.close();//关流 System.out.println(prop); }
其实是load的原理,其实直接使用load加载以流作为参数就行了~
Properties prop=new Properties(new FileInputStream("info.txt"))
实例:
用于记录应用程序的使用次数,次数到了之后就给提示;
思路:
1、用读取流管理文本信息文件。如果存在则读取,不存在则创建
2、每次运行,将文件数据存入集合中,读值,判断次数,如果小于5次,则此时增加一次
3、将增加的东东存入配置文件中;
1 int count=runCount(); 2 if(count>5)//如果程序被使用了超过5次,则终止使用,并提示 3 { 4 System.out.println("次数到了,交钱!!!!!"); 5 return ; 6 } 7 else 8 System.out.println("程序第"+count+"次Run!"); 9 } 10 public static int runCount()throws Exception{11 Properties prop=new Properties();12 File file=new File("info.ini");//将文件封装后缀标准是ini13 if(!file.exists())14 file.createNewFile();15 FileReader fr=new FileReadere(file);16 prop.load(fr);17 18 int count;19 String value=http://www.mamicode.com/prop.getProperty("time");20 if(value!=null){21 count=Integer.parseInt(value);22 }23 count++;24 prop.setProperty("time",count+"");25 26 FileWriter fw=new FileWriter(file);27 prop.store(fw, "注释");28 29 fw.close();30 fr.close();31 32 return count;33 34 }
第三讲 打印流
打印流好处就是不用newline和flush
//键盘录入并使用PrintWriter谢茹文件BufferedReader bufr=new BufferedReader(new InputStream(System.in));PrintWriter pw=new PrintWriter(new FileWriter("pp.txt"),ture);//true代表自动刷新String line=null;while((line=bufr.readerLine())!=null){ if(line.equals("over")){ break; } out.println(line.toUpperCase());}bufr.close();pw.close();
第四讲 序列流
常用的步骤
1、创建集合,将流对象添加
2、创建Enumeration对象,将集合元素加入
3、常见SequenceInputStream对象,合并流对象
4、创建写入流对象,FileOutputStream关联写入文件
5、利用SequenceInputStream对象和FileOutputStrean 对象进行反复读写
将文件放在集合,通过集合创建枚举对象,把枚举对象作为参数传入合并流作为读取;
在关联一个写入文件流,做反复读写
黑马程序员——Java基础——IO流(2)——File