黑马程序员——java基础---IO流(第20天)

------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流-----

一、概述

File对象用来将文件或者文件夹封装成对象。方便对文件与文件夹的属性信息进行操作 。File对象可以作为参数传递给流的构造函数。Java无法访问隐藏文件。

1、File中的常用方法

三种常用构造函数
        File()                                                           File d = newFile("c:\\abc");                                                       
        File(File parent,String child)                  Filef3 = new File(d,"c.txt");                                                                            
        File(String pathname)                               File f1 = new File("a.txt");
        File(String parent,String child)              Filef2 = new File("c:\\abc","b.txt");,

2,分隔符功能 

static  String separator       

3,创建

       boolean  createNewFile()(此功能调用底层方法所以会抛出异常)  在指定位置创建文件,如果该文件已经存在,则不创建,返回false。
和输出流不一样,输出流对象一建立就创建文件。而且若文件已经存在,会覆盖。
       boolean  mkdir():  创建一级文件夹。
       boolean  mkdirs(): 创建多级文件夹。

4,删除

       boolean  delete():    删除成功返回true,否则返回false。如果文件正在被使用,则无法删除返回false。
void  deleteOnExit();   在程序退出时删除指定文件。

5,判断

       boolean  canExecute():   判断文件是否可以执行  canWrite()   是否能读
       boolean  exists();      判断文件是否存在.         canRead()    是否能写
       boolean  isFile():               是否是文件                  compareTo()  按照字母
       boolean  isDirectory();      是否是目录                             顺序比较
       boolean  isHidden();          是否是隐藏文件
       boolean  isAbsolute();              是否是绝对路径
注:在判断文件对象是否是文件或者目录时,必须先判断该文件对象封装的内容是否存在。

6,获取信息

       String getName():  获取文件或目录的名称
       String getPath():   获取封装的路径
       String getParent(): 返回绝对路径中的父目录。若获取的是相对路径,返回null
       String getAbsolutePath()  将绝对路径变成字符串并返回
       File  getAbsoluteFile()  返回文件对象  (文件名字符串通过new就变成文件对象,通过toString()就变成字符串)
       long  lastModified()   此文件最后一次被修改的时间
       long  length()                  获取文件大小

7,更改名字和目录

       public boolean renameTo(File dest) 重新命名此抽象路径名表示的文件

8,列出目录中的内容

       8.1、方法:Static File listRoots()   列出可用的所有文件系统根  File[] files= File.listRoots();
       8.2、方法:String[] list()  返回当前目录下所有的文件和文件夹的名称包含隐藏文件。
调用list方法的file对象必须是封装一个目录。该目录还必须存在否则异常 。
       8.3、方法:String [] list(FilenameFilterfilter)过滤器
       过滤目录中的所有文件并返回所有符合条件的文件的名称,符合条件就返回真,否则就返回假;只返回名称有局限性。
   FilenameFilter为接口并且里面只有一个方法:booleanaccept(File dir,String name)
 若accept返回真,则返回此文件;若为假,则将此文件过滤掉。
       8.4、方法:File[]listFiles()
       8.5、方法:File[] listFiles(FilenameFilter filter)
    过滤目录中的所有文件并返回所有符合条件的文件的对象;然后可以对获得的对象进行操作;
       8.6、方法:File[]listFiles(FileFilter filter) 用过滤器过滤文件,返回特定的文件对象,然后对文件对象进行操作。

9,递归思想(自己调用自己)

递归定义: 函数自己调用自己。

注意:1,递归时一定要明确结束条件限定条件。

        2,要注意递归的次数。尽量避免内存溢出。
应用场景:当某一功能要重复使用时。
代码示例:

小练习 :将一个指定目录下的java文件的绝对路径,存储到一个文本文件中。建立一个java文件列表文件。

代码示例 :




二、Properties集合对象

1、概述

Properties是hashtable的子类。
Properties具备map集合的特点。而且它里面存储的键值对都是字符串。
Properties是集合中和IO技术相结合的集合容器。
该对象的特点:可以用于键值对形式的配置文件。
则在加载数据时,需要数据有固定格式:键=值。

2、常用方法

Object  setProperty(String key,String value) 调用Hashtable 的方法 put。
String  getProperty(String key)  返回键的对应值
void  load(InputStream inStream):将字节流中的数据加载进集合中;
void  load(Reader reader)              将字符流中的数据加载进集合中
void  list(PrintWriterout);        列出集合中的所有元素。
void  store(OutputStream out,String comments)  将集合中的元素存储到指定的文件中。comments为注释信息。通过字节流存储
void  store(Writer writer,String comments)           将集合中的元素存储到指定的文件中。comments为注释信息。通过字符流存储
Set<String>stringPropertyNames()  返回此属性列表的中的所有键集。
代码示例1:
 Properties prop = new Properties();
prop.setProperty("zhangsan","30");
prop.setProperty("lisi","39");
Stringvalue = prop.getProperty("lisi");
prop.setProperty("lisi",89+"");
Set<String>names = prop.stringPropertyNames();
for(Strings : names)
{
System.out.println(s+":"+prop.getProperty(s));
}

小练习:用于记录应用程序运行次数。如果使用次数已到,那么给出注册提示。


三、打印流对象

该流提供了打印方法println(),可以将各种数据类型的数据都原样打印。
PrintWriter与PrintStream,其中PrintWriter最常用可以代替PrintStream。

1、字节打印流:PrintStream()

构造函数可以接收的参数类型:
1,file对象。File
2,字符串路径。String
3,字节输出流。OutputStream
4, 异常强大的打印方法:println()

2、字符打印流:PrintWriter()

构造函数可以接收的参数类型:
1,file对象。File
2,字符串路径。String
3,字节输出流。OutputStream
4,字符输出流,Writer(文件对象)。Writer(流对象,true)自动刷新,不用在调用flush().(当把文件封装到流里面就可以自动刷新了)

5, 异常强大的打印方法:println();

注:从以上可以接收的数据类型可以看出PrintWriter()比PrintStream()的功能更强大。

代码示例:

四、SequenceInputStream()序列流(合并流)

作用:可以同时将多个流进行合并成一个流。

构造函数:
两个流对象 1、SequenceInputStream(InputStreams1,InputStream s2)
多个流对象 2、SequenceInputStream(Enumeration<? Extends InputStream> e)
    从构造函数可以看出序列流只能操作字节流。
    代码示例:


小练习:切割文件,将一个图片切割成三个碎片,然后在组合成一个完整的图片

代码示例:




------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流-----


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值