黑马程序员--Java基础学习之IO流之File类、Properties对象、打印流、序列流等

来源:互联网 发布:桃子圈微博全数据图 编辑:程序博客网 时间:2024/06/06 09:05
--------------------- ASP.Net+Android+IOS开发、.Net培训、期待与您交流! -------------------

一、File对象

流对象只能操作数据,而文件等信息必须通过File类操作。

File常见方法

1、创建。 boolean createNewFile(); //f.createNewFile();//如果此文件已经存在,则返回false2、删除。 boolean delete();  void deleteOnExit(); //在程序退出时删除指定文件,一般临时文件较长使用3、判断。 切记:在判断文件是否是文件或者目录时,必须先判断该文件是否存在boolean exists();//文件是否存在isFile()isDirectory()isHidden()boolean canExecute(); //。。  canRead()canWrite().....4、获取。getName()getPath()getAbsolutePath().....5、创建目录(创建文件夹)File f= new File("test");f.mkdir();//只能创建文件夹,即一级目录f.mkdirs();//创建多级目录

二、Properties对象

1、是hashtable的子类,具备map集合的特点,存储的键值对都是字符串。

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

3、特点:可用于键值对形式的配置文件。

属性操作文件的键值对实例:

import java.io.*;import java.util.*;class  Test{public static void main(String[] args) throws IOException{Properties prop = new Properties();File file = new File("count.ini");if(!file.exists()){file.createNewFile();}FileInputStream fis = new FileInputStream(file);prop.load(fis);int count = 0;String value = prop.getProperty("time");if(value != null){count = Integer.parseInt(value);if(count >= 5){System.out.println("使用次数已经到!!!");return;}}prop.setProperty("time",++count+"");FileOutputStream fos = new FileOutputStream(file);prop.store(fos,"注释");fis.close();fos.close();}}

三、其他流对象

打印流:
      PrintStream 字节打印流
      构造函数可以接受的参数:1、file对象File  2、字符串路径String  3、字节输出流OutputStream
      PrintWriter 字符打印流
      构造函数接受的参数:1、file对象File  2、字符串路径String  3、字节输出流OutputStream4、字符输出流 Writer
序列流
      SequenceInputStream  对多个流合并  (分割流练习)
      可序列化实现接口Serializable,序列化堆中的对象,静态数据不能被序列化,关键字transient修饰的数据也不能被序列化 
管道流(涉及到多线程)
      PipedInputStream PipedOutputStream

四、读取流的一个特殊有趣现象

即常见的“联通”现象。

现象:1、在电脑任何位置,右键新建文本文档;2、用微软自带的文本文档打开该文档,并输入“联通”两个字,不要有标点空格等其他字符,保存,并关闭;3、再次用微软自带的文本文档打开该文档,看看什么效果?(没有“联通”字样,而是一个无法识别的黑块)

原因分析

1、微软文本文档默认新建使用GBK字符集;

2、UTF-8编码按1 2 3 字节不等存储数据,解码时需要一一对应去解码,因此UTF-8的每一个字符都会带一个头标示,来标示应该读取几个字节查表。查表为:

一字节:0.。。。  二字节: 字节1:110 。。。 字节2: 10 。。。三字节:字节1:1110 。。。字节2: 10 。。。。字节3:10 。。。。
因此,文本文档在读取数据时,如果发现数据存储的格式正好符合以上存储方式,则会以UTF-8的编码打开。

3、中文“联通”两个字的二进制存储正好符合utf-8的规则,因此文本文档就误以utf8编码打开,去查u8编码表,自然没有,故显示一个不识别的黑块。

解决办法也简单,只要在“联通”前边写个汉字即可。




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