-
字符流操作
1)编码问题
2)认识文本和文本文件
java的文本(char)是16位无符号整数,是字符的unicode编码(双字节编码)
文件是byte byte byte......的数据序列
文本文件是文本(char)序列按照某种编码(utf-8,utf-16be,gbk)序列化为byte的结果
3)字符流(Reader,Writer)---->操作的是文本文件
字符的处理,一次处理一个字符
字符的底层仍然是基本的字节序列
字符流的基本实现
InputStreamReader 完成byte流解析为char流,按照编码解析 可以自定义编码格式
OutputStreamWriter 提供char流到byte流,按照编码处理
FileWriter FileReader
FileWriter fw = new FileWriter("d:/java/javaIO/copy1.txt",true); //有true的时候追加操作 且无法定义编码类型,在不是gbk编码下会出现乱码
字符流的过滤器
BufferedReader -->readLine一次读一行
BufferedWriter/PrintWriter --->写一行
通常用 BufferedReader 和 PrintWriter 组合使用来完成字节流的过滤
BufferedReader br = new BufferedReader( //下面的整个构造(2行)可以用new FileReader("d:/java/javaIO/copy1.txt");
new InputStreamReader( //InputStreamReader可以自定义编码形式
new FileInputStream("d:/java/javaIO/copy.txt")));
PrintWriter pw = new PrintWriter("d:/java/javaIO/copy3.txt");查看全部 -
IO流:Java输入输出的基础
字节流、字符流1.字节流
1)InputStream、OutputStream
InputStream抽象了应用程序读取数据的方式
OutputStream抽象了应用程序写出数据的方式
2)EOF = End 读到-1就读到结尾
3)输入流基本方法(应用程序从键盘读入程序写到了File.txt文件中去)
int b = in.read(); 读取一个字节无符号填充到int低八位 -1是EOF(结束) in代表输入流的对象
in.read (byte[] buf) 读取数据填充到字节数组buf
in.read (byte[] buf,int start, int size) 读取数据到字节数组buf,从buf的start位置开始,存放size长度的数据
4)输出流基本方法
out.write(int b)写出一个byte到流,b的低8位
out.write(byte[] buf)将buf中的字节数组都写出到流
out.write(byte[] buf, int start, int size)字节数组buf从start位置开始写size长度的字节到流
5)FileInputStream-->具体实现了在文件上读取数据(继承了InputStream)
6)FileOutputStream-->具体实现了向文件中写出byte数据的方法(继承了OutputStream)
7)DataOutputStream/DaraInputStream
对“流”功能的扩展,可以更加方便的读取int、long、字符等类型数据
DataOutputStream
writeInt() / writeDouble() / writeUTF()
8)BufferInputStream & BufferOutputStream
这两个流类为IO提供了带缓冲区的操作,一般打开文件进行写入或读取操作时,都会加上缓冲,这种流模式提高了IOde性能
从应用程序中把输入放入文件,相当于将一缸水倒入到另一个缸中:
FileOutputStream-->write()方法:相当于一滴一滴的把水转移过去
DataOutStream-->writeXxx()方法:相当于一瓢一瓢把水转移过去
BufferedOutStream-->write方法更方便,相当于一瓢一瓢先放入桶中,再转移查看全部 -
IO流:Java输入输出的基础
字节流、字符流1.字节流
1)InputStream、OutputStream
InputStream抽象了应用程序读取数据的方式
OutputStream抽象了应用程序写出数据的方式
2)EOF = End 读到-1就读到结尾
3)输入流基本方法(应用程序从键盘读入程序写到了File.txt文件中去)
int b = in.read(); 读取一个字节无符号填充到int低八位 -1是EOF(结束) in代表输入流的对象
in.read (byte[] buf) 读取数据填充到字节数组buf
in.read (byte[] buf,int start, int size) 读取数据到字节数组buf,从buf的start位置开始,存放size长度的数据
4)输出流基本方法
out.write(int b)写出一个byte到流,b的低8位
out.write(byte[] buf)将buf中的字节数组都写出到流
out.write(byte[] buf, int start, int size)字节数组buf从start位置开始写size长度的字节到流
5)FileInputStream-->具体实现了在文件上读取数据(继承了InputStream)
6)FileOutputStream-->具体实现了向文件中写出byte数据的方法(继承了OutputStream)
7)DataOutputStream/DaraInputStream
对“流”功能的扩展,可以更加方便的读取int、long、字符等类型数据
DataOutputStream
writeInt() / writeDouble() / writeUTF()查看全部 -
RandomAcessFile
java 提供的对文件类型的访问类,即可以读文件,也可以写文件
支持随机访问文件,可以访问文件的任意位置1.Java文件模型
在硬盘上的文件是byte byte byte存储的,是数据的集合
2.打开文件
有两种模式“rw”读写 “r”只读
RandomAcessFile raf = new RandomAcessFile ( file , "rw");
文件指针,打开文件时指针在开头 pointer = 0
3.写方法
raf.write(int)-->只写一个字节(后8位),同时指针指向下一个位置,准备再次写入
4.读方法
int b = raf.read()-->读一个字节
5.文件读写完成以后一定要关闭(Oracle官方说明)
查看全部 -
列出File的一些常用操作:过滤、遍历等
isDirectory()方法用于判断File类的对象是否是目录
String[] filenames = dir.list(); //返回的是字符串数组,直接子的名称,不包含子目录下的内容
如果要遍历子目录下的内容就需要构造File对象做递归操作吗,File提供了直接返回File对象的api
File[] files = dir.listFiles(); 返回的是直接子目录(文件)的抽象if(file.isDirectory())
//递归,最终列出包括其子目录下的所有文件(不包含子目录)
listDirectory(file);
查看全部 -
File类的使用
java.io.File类用于表示文件(目录)
File类只用于表示文件(目录)的信息(名称、大小等),不能用于文件内容的访问file.mkdir(); //file.mkdirs(); //创建这个文件夹
file.delete();//删除这个文件夹查看全部 -
JAVA I/O 输入输出流
编码问题
File类的使用
RandomAcessFile的使用
字节流的使用
字符流的使用
对象的序列化和反序列化编码:java默认的编码形式 GBK(中文系统下ANSI编码)
GBK编码:中文占2字节,英文占1字节
utf-8编码:中文占3字节,英文占1字节
utf-16be编码:中文占2字节,英文占2字节
编码是什么格式,解码就要用什么格式,否则会报错
文本文件就是字节序列,可以是任意编码的字节序列
如果我们在中文机器上直接创建文本文件,该文本文件只认识ANSI编码(GBK)
联通、联是一种巧合,他们刚好符合了utf-8编码的规则查看全部 -
序列化查看全部
-
概念查看全部
-
字符流实例查看全部
-
缓冲流复制查看全部
-
数据流查看全部
-
拷贝查看全部
-
文件输出查看全部
-
2查看全部
举报