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

--------------------- ASP.Net+Android+IOS开发.Net培训、期待与您交流! -------------------

一、File对象

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

File常见方法

1、创建。 boolean createNewFile(); //f.createNewFile();//如果此文件已经存在,则返回false
2、删除。 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培训、期待与您交流! -------------------
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值