您的位置:首页 > 职场人生

黑马程序员——40,File类和Properties类

2015-09-01 15:46 555 查看
----------- android培训java培训、java学习型技术博客、期待与您交流!------------
黑马程序员——40,File类和Properties类
一:File类----》

File类是针对文件和文件夹封装成对象,进行操作的类,放在java.io包中。

File类的常用字段:public static final String separator //表示分隔符

File常用构造方法:

1,public File(File parent, String child) //按照指定文件路径parent和 指定文件名child建立File实例

2,public File(String pathname) //按照指定路径建立File实例

3,public File(String parent, String child) //按照指定文件路径parent和 指定文件名child建立File实例

File类常用的方法(soc是打印方法,以下方法很多都会抛出异常,注意在方法上声明):

createNewFile的使用:

File  f=new File("f:\\mianbao.txt");

//以下是在指定路径上创建文件
boolean  b  =f.createNewFile();
soc(b);
/*
createNewFile返回的是boolean型,
如果在指定路径上创建文件mianbao.txt成功就返回true,否则false
注意:如果指定路径下有同名文件就不会创建了返回的也是false
还有涉及到IO流的一般都会抛出IO异常,不要忘记这一点。
如果是这样写的话:
File f=new  File("f:\\面包\\mianbao.txt");
boolean  b=f.createNewFile();
这样是编译显示IO异常,找不到指定路径。
(本人电脑f盘此时并没有面包这个文件夹)
也就是说路径一定要是真实存在的。
*/


delete和deleteOnExit方法的使用:

File f=new File("f:\\mianbao.txt");
f.createNewFile();//创建文件
boolean b= f.delete();
soc(b);
/*
delete方法删除文件,
该方法返回的也是boolean型的, 删除成功则是返回true,否则false
File类中还有一个方法deleteOnExit
如果用在此例中f.deleteOnExit();表示java程序运行结束前删除文件
*/
exists方法的使用:

File f=new  File("e:\\JAVAwenjian\\Ioliou17\\Ioliou.17");
boolean   b=f.exists();//判断文件是否在指定路径存在
soc(b);


mkdir建立目录:

File   f=new  File("shuei\\klkl");
boolean b=    f.mkdir();
/*
mkdir方法建立一级目录,
如果建立指定目录成功返回true否则返回false
下面有一种常见情况:
一,
File  f=new  File("f://单");
boolean b=f.mkdir();//返回true
也可以指定哪一个盘存放
二,
File f=new File("shuei//klkl");
boolean b=f.mkdir();//返回false
只可以指定建立一级目录
*/


mkdirs建立目录:

File f=new  File("菠菜\\好吃的菠菜\\更好吃的菠菜");
boolean b=    f.mkdirs();
//mkdirs方法可以建立多级目录
soc(b);
soc("f.exists()="+f.exists());
//exists方法也可以用来判断指定路径下是否存在文件夹

File  f2=new  File("水果.txt");
boolean  b2=f2.mkdirs();//这里建立的是名为“水果.txt”的文件夹!
soc(b2);
//所以mkdir和mkdirs方法都是建立的是文件夹!


isFile和isDirectory判断:

File f=new  File("f:\\狂热\\热.txt");
boolean b1=     f.isFile();//判断封装的对象是否是文件
boolean b2   =   f.isDirectory();//判断封装的对象是否是文件夹(路径)
/*
此例的情况是在指定路径下没有名为“热”的txt文件,
所以,b1和b2都是false
*/
soc("b1="+b1+"   b2="+b2);


返回路径相关操作:

File f=new  File("玄幻1\\玄幻小说.txt"); //
boolean  b=f.isAbsolute();
/*
isAbsolute方法判断是否是绝对路径,
就算是文件不存在只要是绝对路径就返回true
所谓的绝对路径就是从哪一个盘开始写起的才算是绝对路径
*/
soc("b="+b);
soc("f.getPath()="+f.getPath());//f.getPath()=玄幻1\玄幻小说.txt
soc("f.getParent()="+f.getParent());//f.getParent()=玄幻1
// getParent方法返回的是绝对路径的父目录否则返回null

soc("f.getAbsolute()="+f.getAbsolutePath());
//打印的是f.getAbsolute()=E:\JAVAwenjian\玄幻1\玄幻小说.txt
//getAbsolutePath方法返回的是绝对路径
soc("f.getName()="+f.getName());//f.getName()=玄幻小说.txt


lastModified方法

File  f=new File("e:\\JAVAwenjian\\Ioliou17.java");
long l=   f.lastModified();
//lastModified方法返回的是文件最后一次被修改的时间
soc("f.lastModified()="+f.lastModified());


renameTo方法

File f=new  File("f:\\无标题23copy.png");
File f2=new  File("d:\\无标题23copy.png");
f.renameTo(f2);
//效果是:f盘中的无标题23copy.png被剪切到d盘上

File f3=new File("f:\\yuyuyu.java");
File f4=new File("d:\\shue.java");
f3.renameTo(f4);
//效果是:f盘中的yuyuyu.java剪切到d盘上并更名为shue.java


list方法把指定目录下的文件或者文件夹装进数组里面:

File  f=new  File("f:\\yuyuyu.txt");
String[]   s= f.list();
/*
list方法返回的是指定路径下(不能是指定文件)所有的文件名和文件夹名,
如果指定的不是路径而是文件,那么会运行空指针异常
*/


获取根目录:

File[] f=File.listRoots(); //罗列硬盘的根目录
for(File f2:f)
{
soc(f2);
}
/*
打印的是:
以下是listRootsDemo-------
C:\
D:\
E:\
F:\
G:\
*/


listFiles方法把指定目录下的文件或者文件夹装进数组里面:

File  f=new  File("f:\\");
File[]  fs=     f.listFiles();//罗列出某个路径下所有文件或者目录
for(File  zz:  fs)
{
soc(zz.getName()+"---"+zz.length());
//如果是文件夹的话,打印出来的长度显示为0的
}


用FilenameFileter过滤指定目录下的文件或者文件夹:

//只是打印出f盘中的所有的.txt文件
File  f=new File("f:\\");
String[]  s   =f.list( new    FilenameFilter(){
public   boolean  accept(File  dir,String name)
{
return   name.endsWith(".txt");
}
});
/*
File对象的功能:
文件列表
如果只需要罗列出某个指定路径下的某种类型的文件名,
就要用到FilenameFilter,其作用相当于过滤器,
里面有一个方法boolean  accept(File dir,String  name),覆盖该方法就可以了。
*/


public  static   void  soc(Object  obj)//打印方法
{
System.out.println(obj);
}


/*

File类的应用:

罗列出指定路径下所有文件。

这个就需要用到递归了,使用递归的时候要注意限制条件以及递归次数。
其步骤是:

1,先指定好要遍历的路径

2,把指定路径中所有文件或者文件夹放在数组中

3,对数组进行遍历

4,在遍历过程中打印文件名,如果遇到文件夹就用递归遍历其中的文件,重复以上操作直到完结

*/

Import   java.io.*;
class   Ioliou20
{
public  static   void  main(String[] args)
{
File   f=new   File("f:\\技术博客的图片\\");//先指定好要遍历的路径
method(f)   ;

}
public  static   void  method(File   f)
{
soc("这是---"+f);
File[]   fs=f.listFiles();//罗列出指定路径中的所有文件或者目录
for(int  x=0;x<fs.length;x++  )//进行遍历
{

if(fs[x].isDirectory())
method(fs[x]);
/*
因为目录中还有目录,
所以可以自身调用自身函数,这种编程手法称为递归
*/
else
soc(fs[x]); //打印的是绝对路径
}
}
public  static   void  soc(Object  obj)//打印方法
{
System.out.println(obj);
}
}
删除带内容的目录

其步骤是:

1,先指定好要遍历的路径

2,把指定路径中所有文件或者文件夹放在数组中

3,对数组进行遍历

4,在遍历过程中delete删除文件,如果遇到文件夹就用递归遍历其中的文件,重复以上操作

5,最后把指定路径也用delete删除掉

import   java.io.*;
class     Ioliou21
{
publicstatic void main(String[] args)
{
File    f=new  File("f:\\今天练习\\");//先指定要删除的目录
method(f);
File[]    fs=   f.listFiles(); //罗列指定路径中的文件或者目录
for(int  x=0;x<fs.length;x++)//遍历
{
if(fs[x].isDirectory())  //如果是文件夹就递归再次遍历删除里面的文件
{
method(fs[x]);
//soc(fs[x]+"--文件夹--"+fs[x].delete());

}
else
soc(fs[x]+"---"+fs[x].delete());//如果是文件的话直接删除

}
if(f.isDirectory())//这里加上这个判断把外层的文件夹删掉
soc(f+"--文件夹--"+f.delete());

}
public  static  void   soc(Object  obj)//打印方法
{
System.out.println(obj);
}
}


建立java文件列表,这个需要配合IO流读取写入
步骤是:

1,指定源目录

2,建立存放文件的列表可以使ArrayList

3,遍历源目录,添加文件名,如果有文件夹再递归获取里面的文件名

4,把容器中的文件名写入指定存放的文件中

Import   java.io.*;
import   java.util.*;
class  Ioliou22
{
public  static   void  main(String[] args)throws  IOException
{
File  f=new  File("f:\\java文件练习");//指定源目录
List<String>  li=new  ArrayList<String>();//建立存放文件的列表
File   f2=new  File("f:\\2015.8.10.txt");//指定存放文件名的文件
method(f, li) ;//遍历源目录,添加文件名,如果有文件夹再递归获取里面的文件名
method2(li,f2);  //把容器中的文件名写入指定存放的文件中
}
public  static  void  method(File  f,List<String>  li  )
{
File[] fs     =f.listFiles();//罗列指定路径下的文件或者文件夹
for(int x=0;x<fs.length;x++)
{
if(fs[x].isDirectory())//如果是文件夹递归再获取里面的文件
method(fs[x],li);
else
if(fs[x].getName().endsWith(".java"))//判断是否是后缀名为.java文件
li.add(fs[x].getAbsolutePath());  //添加的是绝对路径
}

}
public  static  void  method2(List<String>  li,File   f)throws  IOException
{
//FileWriter   fw=new   FileWriter(f.getAbsolutePath());
FileWriter   fw=new  FileWriter(f);
//FileWriter构造函数也可以接受File类对象
BufferedWriter   bfw=new  BufferedWriter(fw);
for(String  s:li)//逐个遍历写入
{
bfw.write(s);
bfw.newLine();
bfw.flush();
}
bfw.close();//关闭资源

}
public  static   void  soc(Object  obj)//打印方法
{
System.out.println(obj);
}
}


二:Perproties类----》

Properties类的介绍:Properties集合是Hashtable集合的子类,同时具备Map集合特点,里面存放的都是字符串,没有泛型。

Properties集合对象特点:可以用于键值对形式的配置文件,从文件中把数据加载到容器里面的时候需要固定格式:键=值

Properties类是集成了Map和IO流的技术。Map加IO技术就是Properties,主要用于配置文件,配置文件可以实现应用程序数据的共享。其中setProperty方法可以把键值对放进容器中,getProperty方法可以获取键所对应的值,stringPropertyNames方法把所有键放在Set集合中。由于Properties具有Map集合的特点,所以,某对键值对重复了,那么新来的重复元素会覆盖前一个。

小练习:往f:\\8.10号练习.txt中添加新键值对

f:\\8.10号练习.txt的内容:

bvuivb=8

heauobgvjeb=02 qcdtycwqd=45

buiverhbgvi=09

oirjgbitr=20

hbn=00

iohoii=74

oirjgbitr=55

其步骤是:

1,定义Properties容器

2,定义与源文件关联的读取流

3,用load方法加载读取流所关联的源文件中的数据

4,用setProperty添加新的键值对

5,定义写入流与目的地关联

6,用store方法把Properties容器中的元素替换写入流所关联的文件数据

7,可以用Properties类的list方法把Properties容器中的内容打印到控制台

(注意打印出来的顺序,Properties是Hashtable的子类,内部默认按照哈希值表排序的,所以打印出来的顺序与输入顺序可能不一样)

8,关闭资源

import     java.io.*;
import     java.util.*;
class    Ioliou23
{
public     static     void  main(String[] args)throws  IOException
{

Properties     pro=new   Properties();//定义Properties容器
FileInputStream      fis=new    FileInputStream("f:\\8.10号练习.txt");//定义与源文件关联的读取流
pro.load(fis);//直接加载文件数据(键值对)到容器中
pro.setProperty("kkkkkk","kk");//又添加元素到容器中
FileOutputStream   fos=new FileOutputStream("f:\\8.10号练习.txt");//定义写入流与目的地关联
pro.store(fos,"jk");//把pro容器里面的键值对保存到流关联的文件中相当于替换,其中jk仅仅为注释

pro.list(System.out);
/*
这句话把容器pro的内容打印出来,打印的格式:
-- listing properties --
bvuivb=8
oirjgbitr=55
kkkkkk=kk
heauobgvjeb=02   qcdtycwqd=45
buiverhbgvi=09
hbn=00
iohoii=74

*/

fis.close();//关闭资源
fos.close();

}
public   static void  soc(Object  obj)
{
System.out.println(obj);
}
}


Properties的练习:(配置文件的建立和使用)

记录程序运行次数,次数已到就给出注册提示。

1,建立读取流与配置文件关联

2,建立Properties容器

3,load把读取流关联的配置文件的数据加载进来

4,getPropertiy获取键cishu所对应的值

返回值为null就用setProperty添加键值对cishu=1

否则,cishu所对应值加1再用setProperty添加该键值对覆盖掉原本的键值对(这一步很重要)

5,定义写入流与目的地配置文件关联

6,用store方法把容器中的键值对替换写入流所关联的目的地配置文件中

7,关闭资源

import    java.io.*;
import    java.util.*;
class    Ioliou24
{
public     static    void   main(String[] args) throws IOException
{
//File   f=new File("f:\\jilu.properties");//一般写后缀名.properties配置文件
File   f=new  File("f:\\jilu.ini");
if(!f.exists())
f.createNewFile();

FileReader    fis=new   FileReader(f);
//建立读取流对象,这里可以用字符流读取流又可以用字节流读取流
Properties   pro=new Properties();//建立Properties对象
pro.load(fis);//加载文件数据到容器中
String   s= pro.getProperty("cishu");//获取值
int  i=0;
if(s==null)
{
pro.setProperty("cishu","1");

}
else
{
i= Integer.parseInt(s);//把字符串转变成数字
i++;
if(i>=6)
{
soc("次数超过了");
}
pro.setProperty("cishu",i+"");
}

FileWriter   fos=new     FileWriter(f);
//建立写入流对象,这里可以用字符流写入流又可以用字节流写入流
pro.store(fos,"haha");//把数据保存在文件中
fis.close();//关闭资源
fos.close();

}
public  static void  soc(Object  obj)
{
System.out.println(obj) ;
}
}


----------- android培训java培训、java学习型技术博客、期待与您交流!------------
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: