java中的输入输出基础(1)

java中的IO支持通过java.io包下的类和接口来支持。在java.io包下主要包括输入、输出两种io流,每种输入、输出流又分为字节流和字符流。

字节流就是以字节为单位来进行处理输入、输出,字符流就是以字符为单位来进行处理输入、输出的。

java中的io流还分为底层的节点流和上层的处理流。

java中的4个抽象基类,注意是抽象类:字节流(InputStream,OutputStream),字符流(Reader,Writer)。

1、输入流:InputStream/Reader

InputStream、Reader是所有输入流的基类,他们都是抽象类,所以他们不能创建实例来进行输入。他们有一个用于读取文件的输入流:FileInputStream,FileReader

//FileInputStream 实例

FileInputStream fis=new FileInputStream("D:\\wang.ini");          //创建字节输入流
byte[] b=new byte[1024];                                                     //创建一个长度为1024的字节数组
int length=fis.read(b);                                                           //调用InputStream的read(byte[] b):每次读取b.length字节,返回实际读取的字节数
if(length>0){                                                                          
System.out.println(new String(b,0,length));                            //如果有数据,将字节数组转换成字符串输出
}

//FileReader实例

FileReader file=new FileReader("D:\\wang.ini");
char[] c=new char[32];                                                        //字符数组
int length=file.read(c);                                                   
if(length>0){
System.out.println(new String(c,0,length));
}

2、OutPutStream/Writer

输出流  FileOutputStream     FileWriter

  

FileInputStream fis=null;
FileOutputStream fos=null;
try{
fis=new FileInputStream("D:\\wang.ini");
fos=new FileOutputStream("D:\\wang.java");
byte[] b=new byte[32];
int length=fis.read(b);
if(length>0){
fos.write(b, 0, length);                     //每次以b.length大小输出,从0开始 输出大小为length
}
}
catch(Exception e){
System.out.println(e.toString());
}
finally{
fis.close();
fos.close();
}

3、通过上面4个抽象基类的用法我们发现,四个基类使用起来有些麻烦,这就需要借助于处理流。处理流,他可以隐藏底层设备上的节点差异,并对外提供方便的输入、输出方法

//使用PrintStream流来包装OutputStream

PrintStream ps=null;
try{
FileOutputStream fos=new FileOutputStream("D://wang.java");
ps=new PrintStream(fos);                                    //创建一个PrintStream流来包装FileOutputStream流
ps.println("你是谁");
ps.println(new Test());

}catch(Exception e){
System.out.println(e.toString());
}
finally{
if(ps!=null){
ps.close();
}
}

4、一般如果我们进行输入/输出二进制内容,应该考虑使用字节流。如果是文本内容,应该考虑使用字符流。

5、转换流:InputStreamReader将字节输入流转换成字符输入流、OutputStreamWriter将字节输出流转换成字符输出流。但是没有字符输入流转换成字节输入流和字符输出流转换成字节输出流。文本内容是二进制文件特殊形式。使用字符流更方便。

//System.in是一个字节输入流,是InputStream流的一个实例,我们可以使用InputStreamReader转换成字符输入流,再将Reader包装成BufferedReader,利用BufferedReader的readline进行一行一行的读入数据。

InputStreamReader reader=new InputStreamReader(System.in);
BufferedReader br=new BufferedReader(reader);
while(br.readLine()!=null){
if(br.readLine().equals("exit")){
System.exit(1);
}
System.out.println("输出内容为:"+br.readLine());
}

最新文章

  1. 文法 LL1
  2. JS中级 - 03:文档宽高及窗口事件(选)
  3. Debussy与modelsim联仿时 do 文件脚本
  4. C语言 二级指针内存模型③
  5. sql中count(*)和count(字段名)区别
  6. Sqlserver中存储过程,触发器,自定义函数
  7. [leetcode]_Binary Tree Inorder Traversal
  8. hdu 3572 Task Schedule(最大流)2010 ACM-ICPC Multi-University Training Contest(13)——Host by UESTC
  9. bnuoj 25659 A Famous City (单调栈)
  10. ACM Sdut 2158 Hello World!(数学题,排序) (山东省ACM第一届省赛C题)
  11. Jquery的外部链接和编写样式
  12. Qt学习之路(24): QPainter(改写paintEvent)
  13. UIViewController加载过程
  14. Python核心编程第二版(中文).pdf 目录整理
  15. Nginx之 try_files 指令
  16. 利用Jmeter做接口测试的时候,如何提取头部的JSESSIONID然后传递到下一个请求,继续完成当前用户的请求。
  17. 2018acm-icpc西安邀请赛后记
  18. android allowbackup
  19. ==和is
  20. linux和docker的capabilities介绍

热门文章

  1. 英语发音规则---G字母
  2. xargs用例一个
  3. oracle 11gR2 如何修改scan vip 地址 /etc/hosts方式
  4. C#将内容导出到Word到指定模板
  5. (转)Django学习之 第二章:Django快速上手
  6. PHP魔术方法__call()篇
  7. CDR 2017版本LiveSketch工具是什么,怎么用?
  8. 如何在ZBrush 4R7中设置背面遮罩
  9. 第六章 Python之迭代器与生成器
  10. mongodb主从搭建