[首页]
[文章]
[教程]
首页
Web开发
Windows开发
编程语言
数据库技术
移动平台
系统服务
微信
设计
布布扣
其他
数据分析
首页
>
编程语言
> 详细
Java-JavaSE-IO
时间:
2018-09-05 23:02:57
阅读:
188
评论:
0
收藏:
0
[点我收藏+]
输入输出流是相对内存来说的
* Windows的换行:\r\n
* 键盘输入
InputStream in =
System.in
;
System.in这个流不需要关闭,不然本次程序无法再次使用此流
IO的一些使用规律
转换流:
InputStreamReader:字节流转字符流,解码
OutputStreamWriter:字符流转字节流,编码
明确源和目的
源:InputStream Reader(文本)
目的:OutputStream Writer(文本)
明确具体设备
源:
硬盘:FileInputStream FileReader
键盘:
System.in
内存:数组
网络:Socket流
目的:
硬盘:FileOutputStream FileWriter
控制台:System.out
内存:数组
网络:Socket流
字节流
2个抽象基类:InputStream/OutputStream
InputStream
子类
BufferedInputStream
FileInputStream
方法
int available()
返回待操作文件的大小
OutputStream
write()方法直接写到目的地,不用flush(),但是要close()
子类
BufferedOutputStream
FileOutputStream
子类
PrintStream
永不抛IOException
print()
提供许多可以打印多种数据类型的方法,会保持数据的
表示形式
ObjectInputStream\ObjectOutputStream
被操作的对象需要实现Serializable
非瞬态,非静态数据才会被序列化
transient修饰,不会被序列化
强烈建议,给需要序列化的类显示声明serialVersionUID
RandomAccessFile
支持对随机访问文件的读取和写入
不会清空原文件的内容,会在原有内容上进行覆写
可以多个线程,同时往一个文件中写入数据
内部维护了一个byte数组
将字节输入流和输出流进行了封装
源和目的只能是文件
可以获取指针位置,或者设置指针位置,以便操作任意位置的数据
PipedInputStream\PipedOutputStream
结合多线程,某个线程通过PipedInputStream读取数据,另一个线程通过PipedOutputStream将数据写出
PipedInputStream提供PipedOutputStream需要的数据
DataInputStream\DataOutputStream
操作基本数据类型、
ByteArrayInputStream\ByteArrayOuputStream
关闭这个流是无效的,此类的方法在关闭后仍可以使用
源和目的都是内存
字符流
2个抽象基类:Reader/Writer
其实是字节流+编码表,读到字节之后,先查表,再转成字符
Reader
方法
int read()
read a single character,返回读到的字符的int表示,没读到,返-1
int read(char[] c)
将读到的字符存入c中,返回读到的字符个数(只要读到,就返回!),当读到末尾后,返回-1
简单应用:
while( (length=r.read( c ))!=-1){ System.out.print(new String(c , 0, length);}
子类
BufferedReader
构造方法
BufferedReader(
Reader in)
方法
String readLine()
直接读一行,返回字符串,读完,返回
null,而非-1
子类
LineNumberReader
同属于装饰类
用于需要操作行号的情况
InputStreamReader
字节流向字符流转换的桥梁
可以指定码表
小应用
BufferedReader br=new BufferedReader(new InputStreamReader(
System.in
));
子类
FileReader
使用默认的码表
Writer
方法
abstract void close()
closes the stream, flushing it first
abstract void flush()
void write(char[]\int\String x)
子类
OutputStreamWriter
字符流通往字节流的桥梁
可以指定码表
FileWriter
使用默认的码表
FilleWriter fw =new FileWriter("filename");
//若文件不存在,就创建,若存在,则覆盖原文件
所以最好在写入之前一步才写这句话!不然会将原有的文件覆盖
fw.write("abc");
写入临时存储缓冲区
fw.flush();
fw.close();
//关闭前会自动调用flush()方法
异常处理
FileWriter fw= null;
try{
fw=new FileWriter("xxx.txt");
fw.write("a");
}catch(IOException e){}
finally{
if(fw!=null)
try{
fw.close();
catch(IOException e){}
}}
BufferedWriter
构造函数
BufferedWriter(
Writer out)
method
write()
将数据放在缓冲区
flush()
将缓冲区中的东西写入外设
close()
缓冲区关闭后,关闭前会先flush(),流也就关了
void newLine()
写入一个与平台相关的换行符
PrintWriter
保证打印数据的表示形式
构造函数的参数
字符串路径
File对象
字节输出流
字符输出流
序列流
SequenceInputStream
构造器参数有Enumeration<xx>
所以要创建Vector对象存储多个流,来创建Vector的Enumeration
RandomAccessFile
实例支持对随机文件的读和写
内部维护了byte类型的数组,且有指针可以操作数组中的元素
若目的文件存在则不创建,要写的话,则将原来的数据覆盖,若不存在,就创建
getFilePointer()
seek(1*8)
将指针设置到角标是8的位置,每一个角标存储1个字节的数据
读和写都是从角标位置开始的
writeInt()
Java-JavaSE-IO
原文:https://www.cnblogs.com/wonewo/p/9595076.html
踩
(
0
)
赞
(
0
)
举报
评论
一句话评论(
0
)
登录后才能评论!
分享档案
更多>
2021年09月23日 (328)
2021年09月24日 (313)
2021年09月17日 (191)
2021年09月15日 (369)
2021年09月16日 (411)
2021年09月13日 (439)
2021年09月11日 (398)
2021年09月12日 (393)
2021年09月10日 (160)
2021年09月08日 (222)
最新文章
更多>
2021/09/28 scripts
2022-05-27
vue自定义全局指令v-emoji限制input输入表情和特殊字符
2022-05-27
9.26学习总结
2022-05-27
vim操作
2022-05-27
深入理解计算机基础 第三章
2022-05-27
C++ string 作为形参与引用传递(转)
2022-05-27
python 加解密
2022-05-27
JavaScript-对象数组里根据id获取name,对象可能有children属性
2022-05-27
SQL语句——保持现有内容在后面增加内容
2022-05-27
virsh命令文档
2022-05-27
教程昨日排行
更多>
1.
list.reverse()
2.
Django Admin 管理工具
3.
AppML 案例模型
4.
HTML 标签列表(功能排序)
5.
HTML 颜色名
6.
HTML 语言代码
7.
jQuery 事件
8.
jEasyUI 创建分割按钮
9.
jEasyUI 创建复杂布局
10.
jEasyUI 创建简单窗口
友情链接
汇智网
PHP教程
插件网
关于我们
-
联系我们
-
留言反馈
- 联系我们:wmxa8@hotmail.com
© 2014
bubuko.com
版权所有
打开技术之扣,分享程序人生!