菜鸟学习-第十四天(File,Properties,打印流,和各种操作流的对象,以及字符编码的编码,解码)

本文详细介绍Java中的IO流概念,包括File类的各种操作方法,如创建、删除文件和目录,Properties类的应用,打印流、序列流的功能及使用场景,以及对象序列化、管道流等高级特性。

1.File

1.静态字段separator:跨平台与系统有关的默认名称分隔符。
2.
1.创建:boolean createNewFile:在指定位置创建文件,如果该文件已经存在则不创建返回false 和输出流不一样,输出流对象一建立创建文件。而且文件已经存在会覆盖。
boolean mkdir();创建文件夹
boolean mkdirs():创建多级文件夹
2.删除:boolean delete():删除失败返回false。如果文件正在被使用,则删除不了返回false。
void deleteOnExit():在程序退出时删除指定文件。
3.判断:boolean exists():文件是否存在
isFile():此抽象路径是否是一个文件(注意,在判断是否是一个文件和是否是一个目录时必须先判断该文件是否存在)
isDirectory():此抽象路径是否是一个目录
isHidden():是否是一个隐藏文件
isAbsolute() :否是绝对路径
4.获取:getName() :获取文件名
getPath():如果是相对路径则返回相对,绝对则返回绝对。
getParent():该方法返回的是绝对路径中的父目录,如果是相对路径,返回是null,如果相对路径中有上一级目录,那么该目录就是返回结果。
getAbsolutePath():无论相对绝对都返回绝对路径
long lastModified():返回此抽象路径表示的文件最后一次被修改的时间
long length()
5.File[] listRoots():列出可用文件系统根,盘符
String[] list() :调用list方法的file对象必须是封装的一个目录,该目录必须存在。
String[] list(FilenameFilter filter):依据的是FilenameFilter接口下的accept的名称来判断
File[] liseFiles():返回的是当前目录下的文件以及文件夹封装的对象,然后可以通过File对象获取想要的信息(getName,length等)
6.函数调用自身称为递归。注意事项:
1.限定条件
2.要注意递归的次数,尽量避免内存溢出
7.删除一个带内容的目录。
删除原理:
在window中删除目录从里面往外删除,用递归。
8.思考将一个目录下的所有.java文件列出一个清单并保存在一个txt文件中方便查找。

2.Properties

Properties 类继承于 Hashtable.表示一个持久的属性集也就是说它具备map集合的特点,是集合中和IO技术相结合的集合容器。而且它里面存储的键值对都是字符串,该对象的特点,一般用于读取键值对形式的配置文件。
1.设置和获取
有一个默认的没有参数的构造方法,来创建一个空属性列表
有一个带有参数的构造方法,来创建一个有默认值default空属性列表
String setProperty():设置属性
Object getProperty():获去key对应的value
遍历集合中的所有键值对:
Set stringPropertyNames():然后遍历
2.将流中的数据存储到集合中
jdk1.6版本后可以用load(流对象);方法加载进Properties集合里。
3.将集合中的数据存储到写入到输出流
store(输入流对象,注释信息);可以用于将集合中更改的数据写入输入流并写入文件中。
4.可以用于记录应用程序运行次数,如果使用次数已到,那么给出注册提示。(模拟一个程序给一定使用次数,使用次数到了给出提示使用次数已到请充值,分析,计数器来实现,并且保存为配置文件,每次启动读取配置文件,关闭保存配置文件)
5.关于properties类的详细描述和用法参考:https://blog.youkuaiyun.com/yelang0/article/details/76449165

3.打印流

1.该流提供了打印方法,可以将各种数据类型都原样打印分为:PrintWriter(字符打印流)和 PrintStream(字节打印流)
2.PrintStream(字节打印流)构造方法中可以接受的参数类型:
1)file对象 File
2)字符串路径 String
3)字节输出流 OutputStream
3.PrintWriter(字符打印流) 构造方法中可以接受的参数类型:
1)file对象 File
2)字符串路径 String
3)字节输出流 OutputStream
4)字符输出流 Writer
其中一个构造方法可以接受2个参数一个是流一个是boolean自动刷新参数,适用的方法是println();(例子:模拟控制台输入自动刷新到控制台并保存到文件中,注意,当我们要保存到文件中时,因为它接受的参数是流对象,所以我们用new FileWriter封装文件变成流)

4.序列流

SequenceInputStream:将多个输入流串联,然后读第一个流到结束接着读第二个流到结束。一个流关联一个文件,将多个文件输入到一个文件,那么这个序列流就是将多个流合并成一个流然后写入到一个文件中,注意多个流要使用Enumeration,而Enumeration属于Vector中,在Vector中的elements()方法返回一个Enumeration。然后将序列流中的数据写入到文件中

5.切割流

例如:将一个大文件切割为三个文件,那么我们在定义缓存数组的时候大小应该指定,一般前3个文件大小相等,或者第三个不同,定义一个计数器来作为改变写入文件名的变量,并在每次写入后进行流关闭操作,那么循环继续我们就创建了三个流进行了我们定义的缓存数组的三次存储,并且每次存储的文件改变,达到文件切割的目的。最后也可以使用序列流来重新写合并数据。

6.操作对象

ObjectInputStream和ObjectOutputStream:被操作的对象需要实现Serializable
对象持久序列化:就是将对象保存在文件中在这里插入图片描述
注意,当Person对象的成员被Static和transient修饰时,不能被序列化。这两个类需要成对使用。
我们可以指定Person对象的序列号:static final long serialVersionUID=42L;相当于给类指定了一个固定标识,当我们改变类属性时,新类还能操作曾经被序列化的对象。

7.管道流

PipedInputStream和PipedOutputStream
输入输出可以直接连接,通过结合线程使用

8.RandomAccessFile

该类不算是IO体系中的子类,而是直接继承自object,但是他是IO包中的成员,因为它具备读和写功能,内部封装了一个数组,而且通过指针对数组的元素进行操作可以通过getFilePointer获取指针位置,同时可以通过seek改变指针的位置。
该类能完成读写的原理就是内部封装了字节输入,输出流。
通过构造函数可以看出,该类只能操作文件。而且操作文件还有模式(r,只读 rw,读写等)
而且该对象的构造函数要操作的文件不存在会自动创建,如果存在不会覆盖,可以通过seek()方法来设置指针的位置,(数据要分段)再通过write()方法将数据写入指针位置。
随机读写访问实现了多线程下载。
和一般流的区别,一般流从头往后读写。

9.DataInputStream和DataOutputStream

凡是用于操作基本数据类型的流对象就用这个类方便,注意,先writeInt(),要先readInt()才能保证读取到的是正确的数据
用writeUTF()写的只能用readUTF()方法读

10.ByteArrayInputStream和ByteArrayOutputStream

可以用于操作字节数组
1.因为这两个流对象都操作数组,并没有使用系统资源,所以不用进行close关闭
2.ByteArrayOutputStream在构造时不用定义数据目的,因为该对象中已经内部封装了可变长度的字节数组
3.ByteArrayInputStream在构造时,需要接受数据源,而数据源是一个字节数组
4.size()返回缓冲区大小,toString()返回写入内容的字符串,writeTo()写到一个字节输出流中
5.源设备:内存ArrayStream,硬盘FileStream,键盘System.in
目的设备:内存ArrayStream,硬盘FileStream,控制台System.out
而本类就是在内存中进行操作
用流的读写思想来操作数组
6.相似的CharArrayReader和CharArrayOutputStream
StringReader和StringWriter

11.字符编码

1.GBK用2个字节表示一个中文,UTF-8用最多三个字节表示一个中文
2.编码:字符串变成字节数组 String–byte[]; str.getbyte(charsetName);
解码:字节数组变成字符串 byte[]–String; new String(byte,charsetName)
当我们访问Tomcat服务器,Tomcat服务器指定编码是iso8859-1,那么这个服务器在接受不同编码的中文数据时,我们需要将其编码,再解码,得到原来的数据。
3.Integer.toBinaryString(b&255);取一个数的二进制数最低八位

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值