Java I/O---输入与输出
编程语言的I/O类库中常使用流这个抽象概念, 它代表任何有能力产出数据的数据源对象或者是有能力接收数据的接收端对象。 “流” 屏蔽了实际的I/O设备中处理数据的细节。Java类库中的I/O类分成输入和输出两部分, 可以在JDK(文档里的类层次结构中查看到。
通过继承,任何自Inputstream或Reader派生而来的类都含有read()的基本方法, 用于读取单个字节或者字节数组。同样, 任何自 OutputStream或Writer派生而来的类都含有名为write()的基本方法,用于写单个字节或者字节数组。
但是, 我们通常不会用到这些方法,它们之所以存在是因为别的类可以使用它们,以便提供更有用的接口。 因此, 我们很少使用单一的类来创建流对象, 而是通过叠合多个对象来提供所期望的功能(这是装饰器设计模式)。 实际上, Java中 “流” 类库让人迷惑的主要原因就在于:创建单一的结果流, 却需要创建多个对象。
在Java 1.0中, 类库的设计者首先限定与输入有关的所有类都应该从lnputStream继承,而与输出有关的所有类都应该从OutputStream 继承。
下面介绍InputStream 和子类 FileInputStream ,OutputStream 和子类 FileOutputStream
1.FileInputStream
public class FileInputStreamDemo { /** * @param args * @throws IOException */ public static void main(String[] args) throws IOException { // TODO Auto-generated method stub File file = new File("H:\\workspace\\Testfile\\1.txt");//封装文件对象 if(!file.exists()){ throw new RuntimeException("文件不存在");//文件不存在,抛异常 } /** * 将已有的文件读取出来 * FileInputStream */ FileInputStream fis = new FileInputStream(file);//FileNotFoundException int by1 = 0; int i =1; while((by1 = fis.read()) != -1){ System.out.println(i+":"+by1); i++; } fis.close(); } }
2.FileOutputStream
public class FileOutputStreamDemo { /** * @param args * @throws IOException */ public static void main(String[] args) throws IOException { // TODO Auto-generated method stub /* * 将数据写入文件 * 使用字节输出流 * FileOutputStream * */ File dir = new File("H:\\workspace\\Testfile"); if(!dir.exists()){ dir.mkdir();//文件不存在则创建 } //输出流自动创建文件,如果存在则覆盖 FileOutputStream fos = new FileOutputStream("H:\\workspace\\Testfile\\fileoutputstream.txt");//有异常 //调用输出流的写功能 // String str = "abc123"; // byte[] buf = str.getBytes();//将字符串转化为字节数组 fos.write("abc123".getBytes());//异常处理 //关闭资源 fos.close(); } }
3.异常处理
public class IOExceptionDemo { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub FileOutputStream fos = null; try { fos = new FileOutputStream("H:\\workspace\\Testfile\\fileoutputstream.txt"); fos.write("abc123".getBytes());// } catch (IOException e) { // TODO Auto-generated catch block System.out.println(e.toString()); }finally{ if(fos != null){ try { fos.close(); } catch (IOException e) { // TODO Auto-generated catch block throw new RuntimeException();//无法处理的异常,继续抛 } } } } }
Java I/O---输入与输出的更多相关文章
- JAVA框架 Mybaits 输入和输出映射
一.输入映射 当前端传来的参数,比较复杂,比如说用户名称.订单单号.账号信息等等.后端有可能有多个projo类对应这些信息.我们需要把这些的projo类封装成一个类似一个vo类. 通过设置字段形式关联 ...
- Java文本类型输入与输出
import java.io.*; import java.time.LocalDate; import java.util.Scanner; public class Test { public s ...
- Java控制台中输入中文输出乱码的解决办法
Run---Run Configurations---Common---Encoding---Other---GBK Run Configurations里的Common中将编码方式改成GBK就正常了
- 输入和输出--File类
输入和输出 写在前面的:Java中的输入和输出还是比较重要的,之前我都没想整理IO和多线程的,但是在研究后面的好多东西时候,经常要读取资源文件,这个时候就不得不回过头来整理IO了.要玩熟Java的输入 ...
- 1.java.io包中定义了多个流类型来实现输入和输出功能,
1.java.io包中定义了多个流类型来实现输入和输出功能,可以从不同的角度对其进行分 类,按功能分为:(C),如果为读取的内容进行处理后再输出,需要使用下列哪种流?(G) A.输入流和输出流 B ...
- 【JAVA零基础入门系列】Day7 Java输入与输出
[JAVA零基础入门系列](已完结)导航目录 Day1 开发环境搭建 Day2 Java集成开发环境IDEA Day3 Java基本数据类型 Day4 变量与常量 Day5 Java中的运算符 Day ...
- Java 控制台输入数字 输出乘法表(代码练习)
最近,回忆了一些刚学习Java时经常练习的一些小练习题.感觉还是蛮有趣的,在回顾时想起好多学习时的经历和坎坷,一道小小的练习题要研究半天,珍重过往,直面未来.下面贡献代码,Java 控制台输入数字 输 ...
- 输入和输出--java的NIO
Java的NIO 实际开发中NIO使用到的并不多,我并不是说NIO使用情景不多,是说我自己接触的并不是很多,前面我在博客园和CSDN上转载了2篇别人写的文章,这里来大致总结下Java的NIO,大概了解 ...
- Java:文件字符流和字节流的输入和输出
最近在学习Java,所以就总结一篇文件字节流和字符流的输入和输出. 总的来说,IO流分类如下: 输入输出方向: 输入流(从外设读取到内存)和输出流(从内存输出到外设) 数据的操作方式: 字节流 ...
- java基础-基本的输入与输出
java基础-基本的输入与输出 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.基本的输出 基本的输出,System.out 就是系统的标准输出设备,默认为显示器. 1>. ...
随机推荐
- [欧拉路径]Play on Words UVA10129
传送门: UVA - 10129 题目大意: 给定一些单词(可能会重复出现),判断单词是否能排成一个序列,前提是单词的最后一个字母与下一个单词的第一个字母相同.输出"The door c ...
- C#设计模式之十七观察者模式(Observer Pattern)【行为型】
一.引言 今天是2017年11月份的最后一天,也就是2017年11月30日,利用今天再写一个模式,争取下个月(也就是12月份)把所有的模式写完,2018年,新的一年写一些新的东西.今天我们开始讲& ...
- c语言的字符串
1. 字符串 1. 什么是字符串 ● 简单的字符串”itcast” ● 一个’i’是一个字符 ● 很多个字符组合在一起就是字符串了 2. 字符串的初始化 ● char a[] = “123”; ...
- Winform控件Tag使用规范
背景 Tag在WinForm控件中经常被用来存储临时数据,类型为object,但是当程序中多个地方使用到Tag时,容易造成Tag使用的混乱,Tag是如此重要的一个属性,应该要好好考虑下如何有效的使用T ...
- 你绝不能错过的效率神器 —— Alfred
文章首发于[博客园-陈树义],点击跳转到原文<你绝不能错过的效率神器 -- Alfred> Alfred 是 Mac 系统上一款专注于效率提升的著名应用,它能帮你快速打开网页.快速进行自定 ...
- IPv6 VS IPv4,谈谈升级 IPv6 的必要性
11月26日,中办.国办印发了<推进互联网协议第六版(IPv6)规模部署行动计划>,提出国内要在 5~10 年的时间形成下一代互联网自主技术体系和产业生态,建成全球最大规模的 IPv6 商 ...
- 洛谷最短路计数SPFA
题目描述 给出一个N个顶点M条边的无向无权图,顶点编号为1-N.问从顶点1开始,到其他每个点的最短路有几条. 输入输出格式 输入格式: 输入第一行包含2个正整数N,M,为图的顶点数与边数. 接下来M行 ...
- 独家分析:安卓“Janus”漏洞的产生原理及利用过程
近日,Google在12月发布的安卓系统安全公告中披露了一个名为"Janus"安卓漏洞(漏洞编号:CVE-2017-13156).该漏洞可以让攻击者绕过安卓系统的signature ...
- HDU2186--水
悼念512汶川大地震遇难同胞--一定要记住我爱你 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java ...
- NOIP2016提高组初赛(1)
一.选择题 6.后缀表达式,使用二叉树来求解,正常情况下的表达式a*(b+c)- d为中序遍历的二叉树. 即 若转换为后缀表达式(左右根)则为abc+*d- 14.代数字进去,多试几遍: 三.问题求解 ...