一、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编码表,自然没有,故显示一个不识别的黑块。
解决办法也简单,只要在“联通”前边写个汉字即可。