------<ahref="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------
黑马程序员——24,File类,Properties类,
/*
File类的应用:
针对文件或者文件夹封装成对象进行操作.
*/
import java.io.*;
class Ioliou16
{
publicstatic void main(String[] args)
{
File f1=new File("f:\\亚马逊\\亚马逊1号.txt");
/*
将亚马逊1号.txt封装成了对象,
这句话既可以对已经存在的文件封装成对象,
又可以对还没有存在的文件封装成对象。
*/
File f2=new File("f:\\亚马逊","亚马逊1号.txt");
/*
这句话效果和前一句一样,
只不过,把指定位置和文件分开成两个参数进行传递,更加灵活。
*/
File f3=new File("f:\\亚马逊");
File f4=new File(f3,"亚马逊1号.txt");
soc("f1="+f1);//打印的是f1=f:\亚马逊\亚马逊1号.txt
soc("f2="+f2);//打印的是f2=f:\亚马逊\亚马逊1号.txt
soc("f3="+f3);//打印的是f3=f:\亚马逊
soc("f4="+f4);//打印的是f4=f:\亚马逊\亚马逊1号.txt
File f5=new File("f:\\亚马逊"+File.separator+"亚马逊1号.txt");
//File.separator表示仅仅是通用的分隔符
soc("f5="+f5);//打印的是f5=f:\亚马逊\亚马逊1号.txt
}
public static void soc(Object obj)
{
System.out.println(obj);
}
}
——————分割线——————
/*
File类的方法调用
*/
import java.io.*;
class Ioliou17
{
public static void main(String[] args) throwsIOException
{
//createNewFileDemo();
//deleteDemo();
//mkdirsDemo();
//isAbsoluteDemo();
//renameTo();
lastModifiedDemo();
}
public static void createNewFileDemo()throwsIOException
{
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盘此时并没有面包这个文件夹)
也就是说路径一定要是真实存在的。
*/
}
public static void deleteDemo()throws IOException
{
File f=new File("f:\\mianbao.txt");
f.createNewFile();//创建文件
boolean b= f.delete();
soc(b);
/*
delete方法删除文件,
该方法返回的也是boolean型的, 删除成功则是返回true,否则false
File类中还有一个方法deleteOnExit
如果用在此例中f.deleteOnExit();表示java程序运行结束前删除文件
*/
}
public static void existsDemo()throws IOException
{
File f=new File("e:\\JAVAwenjian\\Ioliou17\\Ioliou.17");
boolean b=f.exists();//判断文件是否在指定路径存在
soc(b);
}
public static void mkdirDemo() throws IOException
{
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
只可以指定建立一级目录
*/
soc(b);
}
public static void mkdirsDemo()throws IOException
{
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方法都是建立的是文件夹!
}
public static void pd()
{
File f=new File("f:\\狂热\\热.txt");
boolean b1= f.isFile();//判断封装的对象是否是文件
boolean b2 = f.isDirectory();//判断封装的对象是否是文件夹(路径)
/*
此例的情况是在指定路径下没有名为“热”的txt文件,
所以,b1和b2都是false
*/
soc("b1="+b1+" b2="+b2);
}
public static void isAbsoluteDemo()throws IOException
{
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
}
public static void lastModifiedDemo()
{
File f=new File("e:\\JAVAwenjian\\Ioliou17.java");
long l= f.lastModified();
//lastModified方法返回的是文件最后一次被修改的时间
soc("f.lastModified()="+f.lastModified());
}
public static void 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
}
public static void soc(Object obj)
{
System.out.println(obj);
}
}
——————分割线——————
/*
File类中方法应用
文件列表
*/
import java.io.*;
class Ioliou18
{
public static void main(String[] args)
{
listDemo();
listRootsDemo();
}
public static void listDemo()
{
soc("以下是listDemo--------");
File f=new File("f:\\yuyuyu.txt");
String[] s= f.list();
/*
list方法返回的是指定路径下(不能是指定文件)所有的文件名和文件夹名,
如果指定的不是路径而是文件,那么会运行空指针异常
*/
for(String s2: s)
{
soc(s2);
}
}
public static void listRootsDemo()
{
soc("以下是listRootsDemo-------");
File[] f=File.listRoots();
for(File f2:f)
{
soc(f2);
}
/*
打印的是:
以下是listRootsDemo-------
C:\
D:\
E:\
F:\
G:\
*/
}
public static void soc(Object obj)
{
System.out.println(obj);
}
}
————————分割线——————
/*
File对象的功能:
文件列表
如果只需要罗列出某个指定路径下的某种类型的文件名,
就要用到FilenameFilter,其作用相当于过滤器,
里面有一个方法boolean accept(File dir,String name)
*/
import java.io.*;
class Ioliou19
{
public static void main(String[]args)throws IOException
{
listDemo();
}
public static void listFilesDemo()
{
soc("以下是listFilesDemo----");
File f=new File("f:\\");
File[] fs= f.listFiles();
for(File zz: fs)
{
soc(zz.getName()+"---"+zz.length());
//如果是文件夹的话,打印出来的长度显示为0的
}
}
public static void listDemo()
{
//只是打印出f盘中的所有的.txt文件
File f=new File("f:\\");
String[] s =f.list( new FilenameFilter(){
public boolean accept(File dir,String name)
{
return name.endsWith(".txt");
}
});
for(String s2:s)
{
soc(s2);
}
}
public static void soc(Object obj)
{
System.out.println(obj);
}
}
————————分割线——————
/*
File类的应用:
罗列出指定路径下所有文件。
这个就需要用到递归了,
使用递归的时候要注意限制条件以及递归次数。
*/
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);
}
}
————————分割线——————
/*
删除带内容的目录
*/
import java.io.*;
class Ioliou21
{
publicstatic void main(String[] args)
{
File f=new File("f:\\今天练习\\");
method(f);
}
public static void method(File 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文件列表
*/
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"))
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);
}
}
——————分割线——————
/*
IO流(Properties类的介绍)
同时具备Map集合特点,里面存放的都是字符串,没有泛型。
Properties集合是Hashtable集合的子类
Properties集合对象特点:可以用于键值对形式的配置文件,
从文件中把数据加载到容器里面的时候需要固定格式:键=值
f:\\8.10号练习.txt的内容:
bvuivb=8
heauobgvjeb=02 qcdtycwqd=45
buiverhbgvi=09
oirjgbitr=20
hbn=00
iohoii=74
oirjgbitr=55
*/
import java.io.*;
import java.util.*;
class Ioliou23
{
public static void main(String[] args)throws IOException
{
method3();
}
public static void method()
{
Properties pro=new Properties();
pro.setProperty("pupi","01");//加入元素
pro.setProperty("huj","03");
pro.setProperty("hjsbf","12");
pro.setProperty("hjsbf","100");//注意有重复元素
pro.setProperty("add","10");
String s= pro.getProperty("hjsbf");//获取键所对应的值
soc("s---"+s);
Set jian= pro.stringPropertyNames();//把所有键放在Set集合里面
/*
由于Properties具有Map集合的特点,所以,某对键值对重复了,
那么新来的重复元素会覆盖前一个。
*/
}
public static void method2()throws IOException
{
Properties pro=new Properties();
FileInputStream fis=new FileInputStream("f:\\8.10号练习.txt");
pro.load(fis); //将流的数据加载进集合
/*
f:\\8.10号练习.txt里面的数据要是以等号为分割符分割开来的
*/
pro.setProperty("kkkkkk","kk");
soc(pro);/*
程序执行到这一行时,打开“8.10号练习.txt”文件来看,
并没有上一行添加进的键值对"kkkkkk","kk"
*/
fis.close();
/*打印结果:
{bvuivb=8, oirjgbitr=55, kkkkkk=kk,heauobgvjeb=02 qcdtycwqd=45,buiverhbgvi=09, iohoii=74, hbn=00}
*/
}
public static void method3()throws IOException
{
Properties pro=new 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的练习:(配置文件的建立和使用)
记录程序运行次数,次数已到就给出注册提示。
Map加IO技术就是Properties
配置文件可以实现应用程序数据的共享。
*/
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) ;
}
}