File类:
File类是用来将文件或者文件夹封装成对象,方便对文件或者文件夹的属性信息进行操作。
1: public static void main(String[] args)2: {3: //将a.txt封装成File类对象,可以将已知的和未出现的文件或者文件夹封装成对象
4: File f1=new File("a.txt");5: //将b.txt封装到abc文件夹下
6: File f2=new File("c:\\abc","b.txt");7: //先将abc文件夹封装成一个对象,在作为参数,将c.txt封装到abc文件夹下
8: File d=new File("c:\\abc");9: File f3=new File(d,"c.txt");10:11: //打印结果为a.txt,打印结果为被封装的路径
12: System.out.println("f1:"+f1);
13: //目录分隔符\\在Linux下不会被识别,跨平台性差,可以用separator来替换
14: File f4=new File("c:"+File.separator+"abc","b.txt");15: }
File类的常见方法:
<1>创建
boolean creatNewFile( );在指定位置创建文件时,如果该文件已经存在,则不创建,返回false,和输出流不一样,输出流对象一建立就创建文件,如果文件已经存在,就覆盖掉。
boolean mkdir( );创建文件夹
boolean mkdirs( );创建多级文件夹
1: File f=new File("abc");2: System.out.println("mkdir"+f.mkdir());
3:4: File f1=new File("abc\\kkk\\dd");5: System.out.println("mkdirs"+f1.mkdirs());
<2>删除
boolean delete( );
void deleteOnExit( );在程序退出时,删除掉指定的文件
<3>判断
boolean canExecute( );是否可执行
boolean canRead( );是否可读
boolean canWrite( );是否可写
boolean exists( );文件是否存在
boolean isDirectory( );是否是目录
boolean isFile( );是否是文件
boolean isHidden( );是否为隐藏文件
boolean isAbsolute( );是否为绝对路径,文件不存在,也可以进行判断
1: File f=new File("d:\\java1223\\day20\\file.txt");2: System.out.println(f.isAbsolute());3:
此时并未创建文件,但是打印结果依旧为true。
<4>获取信息
getPath( );获取路径,获取到的是被封装的路径
getAbsolutePath( );获取绝对路径
getName( );获取到文件名
getParent( );返回此抽象路径名父目录的路径名字符串,如果此路径名没有指定父目录,则返回null
lastModified( );返回此抽象路径名表示的文件夹的最后一次被修改的时间
length( );返回此抽象路径名表示的文件的长度
renameTo( );重命名
1: File f1=new File("c:\\Test.java");
2: File f2=new File("D:\\hahah.java");
3:
4: System.out.println("rename:"+f1.renameTo(f2));
5:
作用是将C盘下的Test文件重命名为hahah,并且移动到D盘下去。
list( );返回值为String[] ,是一个字符串数组,功能为打印所有文件名以及文件夹名
1: //将C盘下的所有文件以及文件夹的名称都打印出来,包括隐藏文件
2: File f=new File("c:\\");3: String[] names=f.list();4: for(String name:names)
5: {6: System.out.println(name);7: }8:
调用list方法的File对象必须是封装了一个目录,而且该目录必须存在。
练习:将D:\\j\\day19下的所有的java文件列出来
1: public static void main(String[] args)2: {3: File f=new File("D:\\j\\day19");4:5: String[] names=f.list();6:7: for(int x=0;x<names.length;x++)8: {9: if(names[x].endsWith(".java"))10: System.out.println(names[x]);11: }12: }
使用文件名过滤:
1: import java.io.*;
2:3: class JavaFileList
4: {5: public static void main(String[] args) throws IOException6: {7: FileWriter fw=new FileWriter("javalist.txt");8:9: BufferedWriter bufw=new BufferedWriter(fw);
10:11: File dir=new File("d:\\j\\day19");12: javaFileList(dir,bufw);13:14: bufw.close();15: }16:17: public static void javaFileList(File dir,BufferedWriter bufw)throws IOException18: {19: File[] files=dir.listFiles();20: for(int x=0;x<files.length;x++)21: {22: if(files[x].isDirectory())
23: javaFileList(files[x],bufw);24: else if(files[x].getName().endsWith(".java"))25: {26: bufw.write(files[x].getName()+""+files[x].getAbsolutePath());27:28: bufw.newLine();29: bufw.flush();30: }31: }32: }33:34: }35:
ListFiles( );返回值为File类型
1:2: File dir=new File("c:\\");3: File[] files=dir.listFiles();4:5: for(File f:files)
6: {7: System.out.println(f.getName()+"....."+f.length());
8: }9:10: //使用list()方法或者listFiles()方法,都只可以取出来当前目录下的文件或者文件夹,
11: //不可以取出来子目录下的文件或者文件夹
列出来指定目录下的文件或者文件夹,包含子目录中的内容,即列出来指定目录下的所有内容。
1: class FileDemo3
2: {3: public static void main(String[] args)4: {5: File dir=new File(d:\\java1223);
6: showDir(dir);7:8: }9:10: public static void showDir(File dir)11: {12: System.out.println(dir);13: File[] files=dir.listFiles();14: for(int x=0;x<files.length;x++)15: {16: if(files[x].isDirectory())
17: showDir(files[x]);//递归,函数自身调用自身
18: else
19: System.out.println(files[x]);20: }21: }22: }23: /*递归的注意事项:
24: 1.限定条件25: 2.要注意递归次数,尽量避免内存溢出26: */
需求:删除掉带内容的目录
分析:在window中,删除目录是从里面往外删除的,需要用到递归
1: class RemoveDirDemo
2: {3: public static void main(String[] args)4: {5: File f=new File("c:\\j\\");6: removeDir(f);7: }8:9:10: public static void removeDirDemo(File dir)11: {12: File[] files=dir.listFiles();13: for(int x=0;x<files.length;x++)14: {15: if(files[x].isDirectory())
16: removeDir(files[x]);17: else
18: //进行判断,如果是文件的话,就进行删除
19: files[x].delete();20: }21: //删除掉该目录下的所有文件以后,删除掉该目录
22: dir.delete();23: }24: }25:
练习:将一个指定目录下的java文件的绝对路径存储到一个文本文件中去
1: import java.io.*;
2:3: /*
4: 首先应该开辟一个新的文本文档,用来存储。5: 然后遍历指定目录下的所有的文件,如果是java文件的话,则将名字和绝对路径写入到文本6: 文档中去。7: */8: class JavaFileList
9: {10: public static void main(String[] args) throws IOException11: {12: FileWriter fw=new FileWriter("javalist.txt");13:14: BufferedWriter bufw=new BufferedWriter(fw);
15:16: File dir=new File("d:\\j\\day19");17: javaFileList(dir,bufw);18:19: bufw.close();20: }21:22: public static void javaFileList(File dir,BufferedWriter bufw)throws IOException23: {24: File[] files=dir.listFiles();25: for(int x=0;x<files.length;x++)26: {27: if(files[x].isDirectory())
28: javaFileList(files[x],bufw);29: else if(files[x].getName().endsWith(".java"))30: {31: bufw.write(files[x].getName()+""+files[x].getAbsolutePath());32:33: bufw.newLine();34: bufw.flush();35: }36: }37: }38:39: }40:41:42:
Properties类:
Properties类是Hashtable的子类,也就是说,它具备Map集合的特点,而且它里面存储的键值对都是字符串,是集合中和IO技术相结合的集合容器。
该对象的特点是:可以用于键值对形式的配置文件
Properties类的常用方法:
<1>设置和获取元素setProperty(String key,String value); getProperty(String key)
1:2:3: public static void setAndGet()4: {5: Properties prop=new Properties();
6: prop.setProperty("zhangsan","30");7: prop.setProperty("lisi","39");8:9: String value=prop.getProperty("lisi");
10: System.out.println(value);11: }12:
1: //获取到所有的元素
2: Set<String> names=prop.stringPropertyNames();3: for(String s:names)
4: {5: System.out.println(s+"....."+prop.getProperty(s));
6: }
stringPropertyNames 方法的返回值为Set类型,里面存储的是key值
<2>如何将流中的数据存储到集合中去呢?
例如:将info.txt中的键值对数据存储到集合中进行操作
思路:
1.首先需要用一个流和info.txt文件关联
2.读取一行数据,将该行数据用“=”进行切割
3.等号左边的作为键,等号右边的作为值,存储到Properties中去
1: import java.io.*;
2: import java.util.*;
3:4: class PropertiesDemo
5: {6: public static void method_1(Properties prop)7: {8: BufferedReader bufr=null;
9:10: try
11: {12: bufr=new BufferedReader(new FileReader("info.txt"));13: String arr=null;
14: while((arr=bufr.readLine())!=null)15: {16: String[] s=arr.split("=");
17: prop.setProperty(s[0],s[1]);18: }19: }20: catch (Exception e)
21: {22: System.out.println("读取失败");
23: }24: finally
25: {26: try
27: {28: bufr.close();29: }30: catch (Exception e)
31: {32: System.out.println("关闭资源失败");
33: }34:35: }36:37: }38:39: public static void main(String[] args)40: {41: Properties prop=new Properties();
42: method_1(prop);43: Set<String> names=prop.stringPropertyNames();44: for(String s:names)
45: {46: System.out.println(s+"-------"+prop.getProperty(s));
47: }48: }49: }
1:
2: /*
3: load(InputStream inStream),从输入流读取属性列表
4: load(Reader reader),用面向行的格式,从输入字符流中读取属性列表(键和元素对)
5:
6: */
7: public static void loadDemo()throws IOException
8: {
9: Properties prop=new Properties();
10: FileInputStream fis=new FileInputStream("info.txt");
11:
12: //将流中的数据加载进集合
13: prop.load(fis);
14:
15: //list(PrintStream ps) list(PrintWriter pw)将属性列表输出到指定的输出流
16: prop.list(System.out);
17: }
18:
19: /*
20: 此时如果prop.setProperty("wangwu","39");
21: 修改了王五的年龄,打印结果中的年龄改变了,但是info文件中的年龄没有发生改变
22: 使用store(OutputStream out,String comments)方法,将Properties表中的属性列表写入输出流
23:
24: FileOutputStream fos=new FileOutputStream("info.txt");
25: prop.store(fos,"haha");
26: 其中haha为注释信息,会以#haha的形式出现在info.txt文件中去
27: */
练习:用于记录应用程序运行次数,如果使用次数已到,则给出注册提示
1: class RunCount
2: {3: public static void main(String[] args) throws IOException4: {5: Properties prop=new Properties();
6: File file=new File("count.ini");7:8: //如果文件不存在的话,则创建一个文件
9: if(!file.exists())
10: file.createNewFile();11: FileInputStream fis=new FileInputStream(file);
12:13: //将文件中的信息加载到集合中去,并进行操作
14: prop.load(fis);15:16: int count=0;
17: String value=prop.getProperty("time");
18: if(value!=null)19: {20: count=Integer.parseInt(value);21: if(count>=5)
22: {23: System.out.println("您好,使用次数已到");
24: return ;
25: }26: }27:28: count++;29: prop.setProperty("time",count+"");
30: FileOutputStream fos=new FileOutputStream(file);
31: prop.store(fos,"");32: fos.close();33: fis.close();34:35:36: }37: }38: