黑马程序员—File类
来源:互联网 发布:ps4全境封锁网络 编辑:程序博客网 时间:2024/04/28 10:59
File类
用来将文件或文件夹封装成对象。
方便对文件或文件夹的属性信息进行操作。
File对象可以作为参数传递给流对象的构造方法。
了解File类中的常用方法。
File类中的常见方法:
1、创建
boolean createNewFile(); 在指定位置创建文件,如果该文件已经存在,则不创建,返回为false。
这点和输出流不一样,输出流对象一建立就创建文件,如果已经存在的话会覆盖源文件。
2、删除
boolean delete(); 删除失败则返回false
void deleteOnExit();退出的时候删除指定文件
3、判断
boolean canExcute(); 是否可执行
boolean exists(); 判断文件是否存在
boolean mkdir(); 创建目录(创建文件夹),只能创建一层目录
boolean mkdirs(); 创建多级目录
boolean isFile(); 判断是否为文件
boolean isDiretory(); 判断是否为目录
//在判断文件对象是否为目录或文件时,必须先判断该文件对象封装的内容是否存在,用exists方法判断。
boolean isHiden(); 是否为隐藏文件
boolean isAbsolute(); 是否为绝对路径
4、获取信息
getName(); 获取封装对象的名称
getPath(); 当前路径
getAbsolutePath(); 获取绝对路径
getParent(); 返回的是绝对路径中文件的父目录
long lastModified(); 最后一次修改的时间
long length(); 返回此抽象路径名表示的文件的长度(文件大小)
String[] list(); 返回指定路径下包含的文件和文件夹的名称,包含隐藏文件
//调用list()方法的file对象必须是封装了一个目录,并且该目录必须存在。
File[] listFiles(); 返回目录下的文件与文件夹,返回的都是File对象,方便进行后续操作
一些简单方法的运用:
import java.io.*;class FileDemo{public static void main(String[] args)throws IOException{method_4();}public static void method_4(){File f = new File("123.txt");sop("path:"+f.getPath()); sop("AbsolutePath:"+f.getAbsolutePath());}//创建文件public static void method_1()throws IOException{File f = new File("file.txt");//sop("create:"+f.createNewFile());sop("delete:"+f.delete());}//判断文件public static void method_2()throws IOException{File f = new File("file.txt");sop("create:"+f.createNewFile());sop("execute:"+f.canExecute());}//创建File对象public static void consMethod(){//将a.txt封装成File对象,可以将已有的和未出现的文件或者文件夹封装成对象。File f1 = new File("F:\\abc\\a.txt");boolean bl=f1.mkdirs();//File f2 = new File("F:"+File.separator+"abc","b.txt");File d = new File("F:\\abc");File f3 = new File(d,"c.txt");sop(bl);sop("f1:"+f1);sop("f2:"+f2);sop("f3:"+f3);}public static void sop(Object obj){System.out.println(obj);}}
File.separator :与系统相关的默认名称分隔符,为了方便,它被表示成字符串(目录分隔符)
下面对File进行一些简单的练习,
需求:列出指定目录下的文件或者文件夹,包含子目录中的内容,也就是列出指定目录下的所有内容。
使用递归的方式完成。
注意事项:
1、限定条件。
2、要注意递归的次数,避免内存溢出。
/*需求:遍历一个目录下的文件和文件夹因为目录中还有目录,只要使用同一个列出目录功能的函数完成即可。在列出过程中出现的还是目录的话,还可以再次调用本功能。也就是函数自身调用自身,这种编程手法,称为递归*/import java.io.*;class FileDemo3{public static void main(String[] args) throws IOException{File dir = new File("F:\\java"); showDir(dir,0);}public static String getLevel(int level){/*用StringBuilder来装载获取到的目录,并进行分级*/StringBuilder sb = new StringBuilder();for(int i=0;i<level;i++){sb.append(" ");}return sb.toString();}//递归实现public static void showDir(File dir,int level) {//每次获取一个名称就将其和它所在的层级一起打印出来,每往下一层,多打一个" "System.out.println(getLevel(level)+dir.getName());level++;//获取这个目录下的所有文件File[] files = dir.listFiles();for(int i=0;i<files.length;i++){//如果这个文件时目录,则继续调用方法自身,再对这个目录文件进行遍历if(files[i].isDirectory())showDir(files[i],level);elseSystem.out.println(getLevel(level)+files[i]);}}/**********************************************//递归演示**********************************************///用递归求从1+.....+n的值public static int getNum(int n) //数值太大会导致内存溢出{if(n==1)return 1;return n+getNum(n-1);}//用递归求一个整数的二进制表现形式public static void toBin(int num){if(num>0){toBin(num/2);System.out.print(num%2);}}}
下面介绍Properties类
Properties是hashtable的子类。
也就是说它具备了map集合的特点,而且它里面存储的键值对都是字符串。
是集合中和IO技术相结合的集合容器。该对象的特点:可以用于键值对形式的配置文件。
Properties prop = new Properties();
prop.setProperty("zhangsan",30); //设置属性的键和值
prop.getProperty("zhangsan"); //获取zhangsan所对应的值,相当于"键—值"的形式。
prop.StringPropertyNames(); //返回一个Set集合,包含prop中所有的键值。
用Properties演示软件使用次数计数:
import java.io.*;import java.util.*;class RunNumberDemo {public static void main(String[] args) throws IOException{File file = new File("number.ini");if(!file.exists())file.createNewFile();FileInputStream fis = new FileInputStream(file);FileOutputStream fos = new FileOutputStream(file);Properties prop = new Properties();prop.load(fis);int number = 0;String value = prop.getProperty("time");if(value!=null){number = Integer.parseInt(value);if(number>=5){System.out.println("试用次数已经到了,麻烦续费!");return;}}number++;prop.setProperty("time",number+"");prop.store(fos,"");//改完数据之后,必须store进存储的文件中fis.close();fos.close();}}
在看毕老师的代码之前,自己学习了Properties的方法之后,自己试着写了一个,也可以实现,
但相比毕老师的代码,感觉还需要更加努力才可以将代码更加精炼以及提高效率
package com.east.day18;import java.io.*;import java.util.*;/*模拟软件使用次数提示,超过次数提示试用期满,需注册*/class PropertyDemo2{public static void main(String[] args)throws IOException{int count = 1;File file = new File("D:\\javademo\\count.txt");if(!file.exists()){file.createNewFile();count = 0;}Properties prop = new Properties();if(count == 0){PrintWriter pw = new PrintWriter(new FileWriter(file));prop.setProperty("count", "1");prop.list(pw);prop.clear();pw.close();}else{prop.load(new FileReader(file));String s = prop.getProperty("count");count = Integer.parseInt(s);if(count < 5){count++;prop.setProperty("count", String.valueOf(count));prop.store(new FileWriter("D:\\javademo\\count.txt"),"");}else {System.out.println("免费试用时间已到,请续费以继续使用哦!");}}}}
- 黑马程序员—File类
- 黑马程序员—File类
- 黑马程序员:File类
- 黑马程序员-File类
- 黑马程序员---File类
- 黑马程序员--File类
- 黑马程序员:File类
- 黑马程序员--File类
- 黑马程序员--File类
- 黑马程序员——File类
- 黑马程序员——File类
- 黑马程序员——File类
- 黑马程序员——File类
- 黑马程序员——File类
- 黑马程序员——异常,File类
- 黑马程序员——异常、File类
- 黑马程序员——File类
- 黑马程序员 —— File类
- javaSE-面向对象-this关键字
- 驱动层-3 I2C驱动
- 文件传输0.7版
- 黑马程序员_网络编程之简易文本转换器
- javaSE-面向对象-static关键字
- 黑马程序员—File类
- 二十条MySQL性能优化的经验
- Linux任务调度(二)—cron
- 你家门前 (너의 집 앞)
- Emacs调用Matlab编译器-快速配置
- 发热管该如何
- SQL 函数的应用及比较对于海量数据查询优化
- 在linux中安装gdb遇到的问题
- eCos模块动态加载支持——objloader组件