----------- 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的
}
//只是打印出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学习型技术博客、期待与您交流!------------