编程语言的I/O类库中常使用流这个抽象概念, 它代表任何有能力产出数据的数据源对象或者是有能力接收数据的接收端对象。 “流” 屏蔽了实际的I/O设备中处理数据的细节。Java类库中的I/O类分成输入和输出两部分, 可以在JDK(文档里的类层次结构中查看到。

通过继承,任何自InputstreamReader派生而来的类都含有read()的基本方法, 用于读取单个字节或者字节数组。同样, 任何自 OutputStreamWriter派生而来的类都含有名为write()的基本方法,用于写单个字节或者字节数组。

但是, 我们通常不会用到这些方法,它们之所以存在是因为别的类可以使用它们,以便提供更有用的接口。 因此, 我们很少使用单一的类来创建流对象, 而是通过叠合多个对象来提供所期望的功能(这是装饰器设计模式)。 实际上, Java中 “流” 类库让人迷惑的主要原因就在于:创建单一的结果流, 却需要创建多个对象。

  在Java 1.0中, 类库的设计者首先限定与输入有关的所有类都应该从lnputStream继承,而与输出有关的所有类都应该从OutputStream 继承

下面介绍InputStream 和子类 FileInputStreamOutputStream 和子类 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---输入与输出的更多相关文章

  1. JAVA框架 Mybaits 输入和输出映射

    一.输入映射 当前端传来的参数,比较复杂,比如说用户名称.订单单号.账号信息等等.后端有可能有多个projo类对应这些信息.我们需要把这些的projo类封装成一个类似一个vo类. 通过设置字段形式关联 ...

  2. Java文本类型输入与输出

    import java.io.*; import java.time.LocalDate; import java.util.Scanner; public class Test { public s ...

  3. Java控制台中输入中文输出乱码的解决办法

    Run---Run Configurations---Common---Encoding---Other---GBK Run Configurations里的Common中将编码方式改成GBK就正常了

  4. 输入和输出--File类

    输入和输出 写在前面的:Java中的输入和输出还是比较重要的,之前我都没想整理IO和多线程的,但是在研究后面的好多东西时候,经常要读取资源文件,这个时候就不得不回过头来整理IO了.要玩熟Java的输入 ...

  5. 1.java.io包中定义了多个流类型来实现输入和输出功能,

    1.java.io包中定义了多个流类型来实现输入和输出功能,可以从不同的角度对其进行分 类,按功能分为:(C),如果为读取的内容进行处理后再输出,需要使用下列哪种流?(G)   A.输入流和输出流 B ...

  6. 【JAVA零基础入门系列】Day7 Java输入与输出

    [JAVA零基础入门系列](已完结)导航目录 Day1 开发环境搭建 Day2 Java集成开发环境IDEA Day3 Java基本数据类型 Day4 变量与常量 Day5 Java中的运算符 Day ...

  7. Java 控制台输入数字 输出乘法表(代码练习)

    最近,回忆了一些刚学习Java时经常练习的一些小练习题.感觉还是蛮有趣的,在回顾时想起好多学习时的经历和坎坷,一道小小的练习题要研究半天,珍重过往,直面未来.下面贡献代码,Java 控制台输入数字 输 ...

  8. 输入和输出--java的NIO

    Java的NIO 实际开发中NIO使用到的并不多,我并不是说NIO使用情景不多,是说我自己接触的并不是很多,前面我在博客园和CSDN上转载了2篇别人写的文章,这里来大致总结下Java的NIO,大概了解 ...

  9. Java:文件字符流和字节流的输入和输出

    最近在学习Java,所以就总结一篇文件字节流和字符流的输入和输出. 总的来说,IO流分类如下: 输入输出方向:     输入流(从外设读取到内存)和输出流(从内存输出到外设) 数据的操作方式: 字节流 ...

  10. java基础-基本的输入与输出

    java基础-基本的输入与输出 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.基本的输出 基本的输出,System.out 就是系统的标准输出设备,默认为显示器. 1>. ...

随机推荐

  1. Makefile Android.mk 引发的思索

    在我们编写 Android 平台 cocos2d-x 游戏的时候,我们除了编写 Classes 之内的源代码文件之外,我们还需要维护其编译文件 Android.mk,如我们在 Classes 添加新的 ...

  2. CCF认证之——相反数

    这道题目非常简单! #include<iostream> using namespace std; int main() { ],n,count=; cin >> n; ; i ...

  3. 使用Maven Archetype插件构建Maven工程原型模板

    创建原型模板 1.在空目录运行archetype:generate上面的命令,待下载完必要的jar包后,首先需要输入内置的原型编号: 1 Choose archetype: 2 1: internal ...

  4. 学习笔记:UITabBarController使用详解

    一.手动创建UITabBarController 最常见的创建UITabBarController的地方就是在application delegate中的 applicationDidFinishLa ...

  5. Logistic 回归模型 第一遍阅读笔记

    MLE :最大似然估计,求得的这套参数估计能够通过指定模型以最大概率在线样本观测数据 必须来自随机样本,自变量与因变量之间是线性关系 logistic 回归没有关于自变量分布的假设条件,自变量可以连续 ...

  6. ##8.创建虚拟机-- openstack pike

    ##8. openstack创建虚拟机 openstack pike 安装 目录汇总 http://www.cnblogs.com/elvi/p/7613861.html ##.创建虚拟机.txt.s ...

  7. tomcat警告setting property 'debug' to '0' did not find a matching property

    在使用tomcat6.0版本结合myeclipse进行java web项目,运行程序显示setting property 'debug' to '0' did not find a matching ...

  8. “核弹级”Android漏洞Janus,黑客可以任意篡改App

    美国时间12月9日,Google披露了一个名为"Janus"安卓漏洞.该漏洞可以让攻击者绕过安卓签名机制,从而让攻击者对App进行篡改,安卓5.0到8.0等个版本系统均受影响. 顶 ...

  9. 2017最新PHP经典面试题目汇总(上篇)

    1.双引号和单引号的区别 双引号解释变量,单引号不解释变量 双引号里插入单引号,其中单引号里如果有变量的话,变量解释 双引号的变量名后面必须要有一个非数字.字母.下划线的特殊字符,或者用{}讲变量括起 ...

  10. Nginx如何配置虚拟主机?

    注意,该环境是依赖于http://www.php20.com/forum.php?m ... &extra=page%3D1 基础上进行配置.默认不具备这些文件 .下面是增加一个mytest点 ...