黑马程序员《java基础总结(十二)》(IO流<File类、打印流>)

来源:互联网 发布:java session键值对 编辑:程序博客网 时间:2024/05/17 00:53
---------------------- ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------


File类:将文件系统中的文件和文件夹封装成了对象。提供了更多的属性和行为可以对这些文件和文件夹进行操作。这些是流对象办不到的,因为流只操作数据。

 

File类常见方法:

1:创建。

   booleancreateNewFile()在指定目录下创建文件,如果该文件已存在,则不创建。而对操作文件的输出流而言,输出流对象已建立,就会创建文件,如果文件已存在,会覆盖。除非续写。

   booleanmkdir()创建此抽象路径名指定的目录。

   booleanmkdirs()创建多级目录。

2:删除。

   booleandelete()删除此抽象路径名表示的文件或目录。

   voiddeleteOnExit()在虚拟机退出时删除。

注意:在删除文件夹时,必须保证这个文件夹中没有任何内容,才可以将该文件夹用delete删除。

   window的删除动作,是从里往外删。注意:java删除文件不走回收站。要慎用。

3:获取.

   longlength()获取文件大小。

   StringgetName()返回由此抽象路径名表示的文件或目录的名称。

   StringgetPath()将此抽象路径名转换为一个路径名字符串。

   StringgetAbsolutePath()返回此抽象路径名的绝对路径名字符串。

   StringgetParent()返回此抽象路径名父目录的抽象路径名,如果此路径名没有指定父目录,则返回null

longlastModified()返回此抽象路径名表示的文件最后一次被修改的时间。

File.pathSeparator返回当前系统默认的路径分隔符,windows默认为“;”。

File.Separator返回当前系统默认的目录分隔符,windows默认为\”。

4:判断:

   booleanexists()判断文件或者文件夹是否存在。

   booleanisDirectory()测试此抽象路径名表示的文件是否是一个目录。

   booleanisFile()测试此抽象路径名表示的文件是否是一个标准文件。

   booleanisHidden()测试此抽象路径名指定的文件是否是一个隐藏文件。

   booleanisAbsolute()测试此抽象路径名是否为绝对路径名。

5:重命名。

    booleanrenameTo(Filedest):可以实现移动的效果。剪切+重命名。

 

String[] list()列出指定目录下的当前的文件和文件夹的名称。包含隐藏文件。

如果调用list方法的File对象中封装的是一个文件,那么list方法返回数组为null。如果封装的对象不存在也会返回null。只有封装的对象存在并且是文件夹时,这个方法才有效。


递归:就是函数自身调用自身。

什么时候用递归呢?

当一个功能被重复使用,而每一次使用该功能时的参数不确定,都由上次的功能元素结果来确定。

简单说:功能内部又用到该功能,但是传递的参数值不确定。(每次功能参与运算的未知内容不确定)

 

递归的注意事项:

1:一定要定义递归的条件。

2:递归的次数不要过多。容易出现StackOverflowError栈内存溢出错误

其实递归就是在栈内存中不断的加载同一个函数。


Java.util.Properties一个可以将键值进行持久化存储的对象。Map--Hashtable的子类。

Map

      |--Hashtable

            |--Properties用于属性配置文件,键和值都是字符串类型。

特点:1:可以持久化存储数据。2:键值都是字符串。3:一般用于配置文件。

 

|-- load()将流中的数据加载进集合。

原理:其实就是将读取流和指定文件相关联,并读取一行数据,因为数据是规则的key=value,所以获取一行后,通过 = 对该行数据进行切割,左边就是键,右边就是值,将键、值存储到properties集合中。

|-- store()写入各个项后,刷新输出流。

|-- list()将集合的键值数据列出到指定的目的地。


以下介绍IO包中扩展功能的流对象:基本都是装饰设计模式。

Java.io.outputstream.PrintStream打印流

1:提供了更多的功能,比如打印方法。可以直接打印任意类型的数据。

2:它有一个自动刷新机制,创建该对象,指定参数,对于指定方法可以自动刷新。

3:它使用的本机默认的字符编码.

4:该流的print方法不抛出IOException

 

该对象的构造函数。

PrintStream(File file) :创建具有指定文件且不带自动行刷新的新打印流。

PrintStream(File file, String csn):创建具有指定文件名称和字符集且不带自动行刷新的新打印流。

PrintStream(OutputStream out):创建新的打印流。

PrintStream(OutputStream out, boolean autoFlush):创建新的打印流。

PrintStream(OutputStream out, boolean autoFlush, Stringencoding):创建新的打印流。

PrintStream(String fileName):创建具有指定文件名称且不带自动行刷新的新打印流。

PrintStream(String fileName, String csn)

 

PrintStream可以操作目的:1File对象。2:字符串路径。3:字节输出流。

前两个都JDK1.5版本才出现。而且在操作文本文件时,可指定字符编码了。

 

当目的是一个字节输出流时,如果使用的println方法,可以在printStream对象上加入一个true参数。这样对于println方法可以进行自动的刷新,而不是等待缓冲区满了再刷新。最终print方法都将具体的数据转成字符串,而且都对IO异常进行了内部处理。

 

既然操作的数据都转成了字符串,那么使用PrintWriter更好一些。因为PrintWrite是字符流的子类,可以直接操作字符数据,同时也可以指定具体的编码。


PrintWriter具备了PrintStream的特点同时,还有自身特点:

该对象的目的地有四个:1File对象。2:字符串路径。3:字节输出流。4:字符输出流。

 

开发时尽量使用PrintWriter

 

方法中直接操作文件的第二参数是编码表。

直接操作输出流的,第二参数是自动刷新。

 

//读取键盘录入将数据转成大写显示在控制台.BufferedReader bufr = new BufferedReader(newInputStreamReader(System.in));//源:键盘输入//目的:把数据写到文件中,还想自动刷新。PrintWriter out = new PrintWriter(new FileWriter("out.txt"),true);//设置true后自动刷新String line = null;while((line=bufr.readLine())!=null){   if("over".equals(line))       break;   out.println(line.toUpperCase());//转大写输出}   //注意:System.in,System.out这两个标准的输入输出流,在jvm启动时已经存在了。随时可以使用。当jvm结束了,这两个流就结束了。但是,当使用了显示的close方法关闭时,这两个流在提前结束了。out.close();bufr.close();


---------------------- ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------
0 0
原创粉丝点击