黑马程序员_IO流_Properties学习

来源:互联网 发布:为知笔记导出到有道 编辑:程序博客网 时间:2024/04/30 04:48

------------------------------android培训、java培训、期待与您交流!----------------------------------------------------------------

 

类 Properties

java.lang.Object
  java.util.Dictionary<K,V>
      java.util.Hashtable<Object,Object>
          java.util.Properties

 

Properties是hashtable的子类。

也就是说它具备map集合的特点。而且它里面存储的键值对都是字符串。

是集合中和IO技术相结合的集合容器。

该对象的特点:可以用于键值对形式的配置文件。

那么在加载数据时,需要数据有固定格式:键=值。

 

 

需求:演示Properties类的基本方法使用,设置和获取元素。

       public static void setAndGet()

       {

              Properties prop = newProperties();

 

              prop.setProperty("zhangsan","30");

              prop.setProperty("lisi","39");

 

              //System.out.println(prop);

              String value =prop.getProperty("lisi");

              //System.out.println(value);

                    

              prop.setProperty("lisi",89+"");

 

              Set<String> names = prop.stringPropertyNames();//JDK1,6 中出现的,将Hash集合转化成Set集合.

              for(String s : names)

              {

                     System.out.println(s+":"+prop.getProperty(s));

              }

       }

 

      

}

 

需求: 如何将流中的数据存储到集合中,info.txt中键值数据存到集合中进行操作。

1,用一个流和info.txt文件关联。

              2,读取一行数据,将该行数据用"="进行切割。

              3,等号左边作为键,右边作为值。存入到Properties集合中即可。

 

importjava.io.*;

importjava.util.*;

publicstatic void method_1()throws IOException//想操作文件先挂上”流”

       {

              BufferedReaderbufr = new BufferedReader(new FileReader("info.txt"));先转成流中

              String line = null;

              Properties prop = newProperties();

 

              while((line=bufr.readLine())!=null)

              {

                     String[]arr = line.split("=");//将中间的=切割.

                     ///System.out.println(arr[0]+"...."+arr[1]);//看是否拿到数据.

                     prop.setProperty(arr[0],arr[1]);//左边作为键,右边作为值。存入到Properties集合中.

              }

 

              bufr.close();

              System.out.println(prop);//打印集合中是否 有数据.

 void

list(PrintWriter out)
          将属性列表输出到指定的输出流。

 void

load(InputStream inStream)
          从输入流中读取属性列表(键和元素对)。

 

publicstatic void loadDemo()throws IOException

       {

              Properties prop = newProperties();

              FileInputStream fis = newFileInputStream("info.txt");

 

              prop.load(fis); //将流中的数据加载进集合。

System.out.println(prop);

              prop.list(System.out);

 void

list(PrintWriter out)
          将属性列表输出到指定的输出流

 

 

prop.setProperty("wangwu","39");//改变是集合中的结果.也就是存在于内存中的结果.

 void

store(OutputStream out,String comments)
         将此 Properties 表中的属性列表(键和元素对)写入输出流。

 

prop.store(fos,"haha");//改变的是硬盘中的键值对的信息.

              fos.close();

              fis.close();

       }

}

 

需求: 限制程序运行次数。当运行次数到达5次时,给出,请您注册的提示。并不再让该程序执行。

用于记录应用程序运行次数。

如果使用次数已到,那么给出注册提示。

 

很容易想到的是:计数器。

可是该计数器定义在程序中,随着程序的运行而在内存中存在,并进行自增。

可是随着该应用程序的退出,该计数器也在内存中消失了。

 

下一次在启动该程序,又重新开始从0计数。

这样不是我们想要的。

 

程序即使结束,该计数器的值也存在。

下次程序启动在会先加载该计数器的值并加1后在重新存储起来。

 

所以要建立一个配置文件。用于记录该软件的使用次数。

 

该配置文件使用键值对的形式。

这样便于阅读数据,并操作数据。

 

键值对数据是map集合

数据是以文件形式存储,使用io术。

那么map+io -->properties.

配置文件可以实现应用程序数据的共享。

import java.io.*;

import java.util.*;

class RunCount

{

       publicstatic void main(String[] args) throws IOException

       {

              Propertiesprop = new Properties();

 

              Filefile = new File("count.ini");//文件存在,先把文件封装成对象,就不会报异常.

              if(!file.exists())//可以对文件来判断.

                     file.createNewFile();

             

              FileInputStream fis = new FileInputStream(file);//文件读取流.

              prop.load(fis);

             

              intcount = 0;//是计数器.

              String value =prop.getProperty("time"); 此时value为null.

             

              if(value!=null)

              {

                     count = Integer.parseInt(value);//获取次数.

static int

parseInt(String s)
          将字符串参数作为有符号的十进制整数进行分析。

 

                     if(count>=5)

                     {

                            System.out.println("您好,使用次数已到,拿钱!");

                            return ;

                     }

 

              }

 

              count++;

              prop.setProperty("time",count+"");

 

              FileOutputStreamfos = new FileOutputStream(file);//建立一个输出流.

 

              prop.store(fos,"");//Properties 表中的属性列表(键和元素对)写入输出流

 

              fos.close();

              fis.close();

             

       }

}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

an";��rr���o� �注意递归的次数。尽量避免内存溢出。

importjava.io.*;

 

classFileDemo3

{

       public static void main(String[] args)

       {

              File dir = newFile("d:\\testdir");

              //showDir(dir,0);

 

              System.out.println(dir.delete());

       }

       public static String getLevel(int level)

       {

              StringBuilder sb = newStringBuilder();

              sb.append("|--");

              for(int x=0; x<level; x++)

              {

                     //sb.append("|--");

                     sb.insert(0,"|  ");

 

              }

              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 x=0; x<files.length;x++)

              {

                     if(files[x].isDirectory())

                            showDir(files[x],level);

                     else

                            System.out.println(getLevel(level)+files[x]);

              }

       }

 

 

递归运算的最简单实现:

publicstatic void toBin(int num)

       {

              if(num>0)

              {

                     toBin(num/2);

                     System.out.println(num%2);

                     // num = num/2;

              }

       }

 

需求: 删除一个带内容的目录。

 

删除原理:

在window中,删除目录从里面往外删除的。

既然是从里往外删除。就需要用到递归。

 

importjava.io.*;

class  RemoveDir

{

       public static void main(String[] args)

       {

             

              File dir = newFile("d:\\testdir");

              removeDir(dir);

       }

 

       public static void removeDir(File dir)

       {

              File[] files = dir.listFiles();

             

              for(File file : files)

              {

                     if(!files[x].isHidden()&&files[x].isDirectory())

                            removeDir(files[x]);

                     else

                            System.out.println(files[x].toString()+":-file-:"+files[x].delete());//删除文件判断是否删除成功. 当误删除操作时出现false.

             

 String

toString()
          返回此抽象路径名的路径名字符串

 

              }

 

              System.out.println(dir+"::dir::"+dir.delete());//删除文件夹.

 

       }

 

}

 

需求: 建立一个java文件列表文件。

将一个指定目录下的java文件的绝对路径,存储到一个文本文件中。

1,对指定的目录进行递归。

2,获取递归过程所有的java文件的路径。

3,将这些路径存储到集合中。

4,将集合中的数据写入到一个文件中。

importjava.io.*;

importjava.util.*;

class  JavaFileList

{

       public static void main(String[] args)throws IOException

       {

             

              File dir = newFile("d:\\java1223");

 

              List<File> list = newArrayList<File>();

 

              fileToList(dir,list);

 

              //System.out.println(list.size());

 

              Filefile = new File(dir,"javalist.txt");//文件创建到d:\\java1223中.

              writeToFile(list,file.toString());//file对象的字符串形式是绝对路径.,  返回此抽象路径名的路径名字符串。

 

       }

       public static void fileToList(File dir,List<File> list)//j将文件存到集合中,这方法要在里面递归,

       {

              File[] files = dir.listFiles();

 File[]

listFiles()
          返回一个抽象路径名数组,这些路径名表示此抽象路径名所表示目录中的文件。

 

              for(File file : files)

              {

                     if(file.isDirectory())

                            fileToList(file,list);

                     else

                     {

                            if(file.getName().endsWith(".java"))

                                   list.add(file);

                     }

              }

       }

 

       public static void writeToFile(List<File> list,StringjavaListFile)throwsIOException//将集合中的数据存储到文本文件中.

       {

              BufferedWriterbufw =  null;//try外面定义.

              try

              {

                     bufw = newBufferedWriter(new FileWriter(javaListFile));

                    

                     for(File f : list)

                     {

                            String path =f.getAbsolutePath();

                            bufw.write(path);

                            bufw.newLine();// 写入一个行分隔符。

                            bufw.flush();

                     }

 

              }

              catch (IOException e)

              {

                     throw e;

              }

              finally

              {

                     try

                     {

                            if(bufw!=null)

                                   bufw.close();

                     }

                     catch (IOException e)

                     {

                            throw e;//不处理,让调用此方法的对方 处理.

                     }

              }

       }

}

 

 

 

 

 

 

 

 

 

 

 

 

 

-----------------------------android培训java培训期待与您交流!----详细请查看:http://edu.csdn.net/heima---------------

原创粉丝点击