jse—IO

来源:互联网 发布:windows账户 编辑:程序博客网 时间:2024/05/22 10:31

1.FileReader FileWriter

是对字符流的读写操作

FileReader  fr =  new FileReader(" fileName");

int fr.read();返回值为所读取字符的int值

int fr.read(char[] ); 返回值为所读数组的长度,目的:将字符读入字符数组


//StringBuilder和StringBuffer的区别

//线程同步和不同步的区别,所以影响其执行快慢。


BufferedReader(new FileReader("fileName")) 提供ReadLine()

BufferedWriter(new FileWriter("fileName"))提供newLine()

装饰设计模式

BufferedReader(fr)传入已有对象,基于已有对象并提供加强功能,该类为装饰类

装饰类通过构造方法接受被装饰类,并提供增强功能

LineNumberReader():BufferedReader的子类,提供行号的功能


2.FileOutputStream FileInputStream

FileInputStream fis = new FileInputSream("");

byte[ ] buf = new byte[fis.available()]//定义一个刚刚好大小的字节数组

fis.read(buf);

复制音频文件:

注意:在返回值为Int的时候,会将byte类型提升,想要变回原值只要&0xff,但因为write只会写最低八位,

保证原来的数据不变。

3.InputStreamreader OutputStreamWriter

转换流,可以在构造函数的参数中加入charSet

BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));

BufferedWriter bufw = new BufferedWriter(new OutputStreamWriter(System.out));

4.PrintWriter PrintStream

 能打印八种基本数据类型

构造函数中可以传入charSet

基本print, println,printf,write等打印功能


5.File

File类为弥补流的缺陷而出现,File类可以操作文件夹和文件信息。

File f = new File("");//File并不会创建文件

创建文件的命令为f.createNewFile();//已经存在就不创建,而在输出流中,存在的话会覆盖掉

File[ ] files = f.listFiles();

f.mkdir()//创建文件夹

f.mkdirs()//创建多个文件夹

isFile(),isDirectory(),listRoots();

separator();//跨平台分隔符   \\


6.Properties

是HashTable的的子类,是集合HeIO相结合的容器

prop.load(fis);加载信息时必须是键值对


7.SequenceInputStream

实现多个流的打印


8.ObjectInputStream ObjectOutputStream

Object必须实现serializble接口

静态成员变量不能被序列化

有transient关键字的不能被序列化


9.PipedInputStream PipedOutputStream

管道流无线第三方容器,不能用于单线程,只能用于多线程


10.RandomAccessFile

RandomAccessFile(File,mode)

mode:r,rw,rws,rwd//r不会创建文件,rw会创建文件但不会覆盖

随机访问文件。也可以对基本数据类型进行读写

Raf.seek();调整文件中的指针,实现对任意位置的数据进行读写

应用实例:用多线程来实现分段存储数据(下载软件的原理)


11.DataInputStream DataOutputStream

操作数据流


12.ByteArrayInputStream ByteArrayOutputStream

byteArrayInputStream(byte[ ])//没有调用底层资源无需关闭流


13.FileWriter和FileOutputStream中可以在构造函数中传入,true,来实现对相应文件的续写


14.编码问题

编码 String——》byte[ ]   str.getBytes();

解码 byte[ ]——》new String(byte[ ]);

数组变字符串,使用Arrays.toString(byte[ ]);

编码发展过程:ASCII——ISO8859-1——GB2312——GBK——Unicode——UTF-8

GBK与UTF之间不能相互编码解码

因为它们都识别中文

UTF—8识别编码原理

01010100    

11001010  10010101 

11101001  10101011    10111000

联通







0 0