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());
}

java中的输入输出<1>的更多相关文章

  1. java中的输入输出方法

    输入 import java.util.Scanner; public class EnterTest { public static void main(String[] args) { //主方法 ...

  2. java中的数据类型,运算符,字符串,输入输出,控制流,大数值,数组; 《java核心技术卷i》 第三章:java基本程序结构;

    <java核心技术卷i> 第三章:java基本程序结构: 每次看书,去总结的时候,总会发现一些新的东西,这次对于java的数组有了更深的了解: java中的数据类型,运算符,字符串,输入输 ...

  3. java中IO流小解

    下面这张图列出了java中一些处理流: java中根据操作对象的不同可以分为:字节流和字符流. 首先我们先表示一下什么叫节点流和处理流: 节点流:可以从或向一个特定的地方(节点)读写数据.如FileR ...

  4. (转)java中的进程与线程

    (转自地址http://www.ibm.com/developerworks/cn/java/j-lo-processthread/) Java 进程的建立方法 在 JDK 中,与进程有直接关系的类为 ...

  5. java中的io系统详解 - ilibaba的专栏 - 博客频道 - CSDN.NET

    java中的io系统详解 - ilibaba的专栏 - 博客频道 - CSDN.NET 亲,“社区之星”已经一周岁了!      社区福利快来领取免费参加MDCC大会机会哦    Tag功能介绍—我们 ...

  6. Java中的GOF23(23中设计模式)--------- 工厂模式(Factory)

    Java中的GOF23(23中设计模式)--------- 工厂模式(Factory) 在给大家介绍工厂模式之前,我想和大家聊聊面向对象的那点事,在这里,引入三个概念. 开闭原则(Open Close ...

  7. Java中的IO流系统详解(转载)

    摘要: Java 流在处理上分为字符流和字节流.字符流处理的单元为 2 个字节的 Unicode 字符,分别操作字符.字符数组或字符串,而字节流处理单元为 1 个字节,操作字节和字节数组. Java ...

  8. java中基本输入输出流的解释(flush方法的使用)

    转自:http://fsz521job.itpub.net/post/5606/34827 网络程序的很大一部分是简单的输入输出,即从一个系统向另一个系统移动字节.字节就是字节,在很大程度上,读服务器 ...

  9. [转载]java中try 与catch的使用

    留着以后看 原文地址:与catch的使用">java中try 与catch的使用作者:碌碌如玉 try{ //代码区 }catch(Exception e){ //异常处理 } 代码区 ...

随机推荐

  1. 2015.04.23,外语,读书笔记-《Word Power Made Easy》 12 “如何奉承朋友” SESSION 33

    1.eat, drink, and be merry 拉丁动词vivo(to live),加上名词vita(life),是许多重要英文词汇的来源. convivo是拉丁动词to live togeth ...

  2. 2014.04.17,转帖,关于FFT的结果为什么要除以N

    http://www.chinavib.com/forum/viewthread.php?tid=23665&highlight= 关于这个问题,我看到的书好像都没有进行解释,这里我试着解释下 ...

  3. JAVA设计模式之【原型模式】

    1.案例一 学生复制 package Prototype; /** * Created by Jim on 2016/10/1. */ public class Student implements ...

  4. 英语发音规则---D字母

    英语发音规则---D字母 一.总结 一句话总结: 1.D发[d]音? doctor ['dɒktə] n. 医生:博士 bread [bred] n. 面包:生计 hand [hænd] n. 手,手 ...

  5. [jzoj 5664] [GDOI2018Day1模拟4.6] 凫趋雀跃 解题报告(容斥原理)

    interlinkage: https://jzoj.net/senior/#contest/show/2703/3 description: solution: 考虑容斥原理,枚举不合法的走的步数 ...

  6. CALayer初认识

    CALayer :CA就是coreAnimation 核心动画 它是同时支持 Mac OS 和 iOS系统的 所有的核心动画都是通过CALayer来实现的 UIView本身是不具备显示功能的 是它内部 ...

  7. MyBatis数据持久化(十)与Spring4整合

    前面几节介绍了mybatis的基本使用方法,本节主要介绍如何使用mybatis与主流的IoC容器Spring进行整合. 我们首先需要获取Spring框架的jar文件,在写本文时spring的最新Rel ...

  8. 性能优化实战-join与where条件执行顺序

    昨天经历了一场非常痛苦的性能调优过程,但是收获也是刻骨铭心的,感觉对sql引擎的原理有了进一步认识. 问题起源于测试人员测一个多条件检索的性能时,发现按某个条件查询会特别慢.对应的sql语句简化为: ...

  9. EXCEL 表格保护破解

    'Alt + F11 进入vb编辑器,插入代码,然后在宏查看器里执行,大概等1-2分钟,完成.   Public Sub AllInternalPasswords() ' Breaks workshe ...

  10. EFCore笔记之异步查询

    当在数据库中执行查询时,异步查询可避免阻止线程. 这有助于避免冻结富客户端应用程序的 UI.异步操作还可以增加 Web 应用程序的吞吐量,可以在数据库操作完成时释放线程去处理其他请求. Entity ...