编程语言的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. Vuex非常适合新手的教程,保教不会!

    本讲解基于Vue-cli(脚手架)搭建的项目. Vuex 数据状态管理工具,整个流程类似依赖注入,相当于预先定义,倒推.(个人理解) 1. 安装vuex  命令行输入 npm install vuex ...

  2. [最短路][部分转]P1027 Car的旅行路线

    题目描述 又到暑假了,住在城市A的Car想和朋友一起去城市B旅游.她知道每个城市都有四个飞机场,分别位于一个矩形的四个顶点上,同一个城市中两个机场之间有一条笔直的高速铁路,第I个城市中高速铁路了的单位 ...

  3. Beautifulsoup分解

    from urllib.request import Request, ProxyHandler from urllib.request import build_opener from bs4 im ...

  4. Win10 之最新最简单有效安装配置adb

    今天在新买的笔记本上安装配置adb,开始觉得挺简单的事,公司win7电脑上有现成的,但实际过程中--没想的那么简单了!好了,废话少说,直接正题. 研究了好一会下,总算搞定,总结如下: 1.下载Andr ...

  5. redis函数总结

    <?php /*1.Connection*/ $redis = new Redis(); $redis->connect('127.0.0.1',6379,1);//短链接,本地host, ...

  6. appium+Linux环境安装配置

      背景:想要在Jenkins上跑appium的自动化测试,所以想要在Jenkins服务器(Linux远程)上安装appium服务,故而研究了一下appium+Linux下安装.虽然有无数的前辈踩过坑 ...

  7. 【算法】字典的诞生:有序数组 PK 无序链表

    参考资料 <算法(java)>                           — — Robert Sedgewick, Kevin Wayne <数据结构>       ...

  8. 大数据学习系列之五 ----- Hive整合HBase图文详解

    引言 在上一篇 大数据学习系列之四 ----- Hadoop+Hive环境搭建图文详解(单机) 和之前的大数据学习系列之二 ----- HBase环境搭建(单机) 中成功搭建了Hive和HBase的环 ...

  9. C++ vector 常用API

    vector: 向量容器,动态数组,类模板 定义和初始化: vector<T> v1; //v1是空vector,元素类型是T类型,执行默认初始化,int为0,string为空串 vect ...

  10. NDK开发小记录 C++读取java层对象内容

    这是自己NDK开发得小记录,关于C++层读取java层传来的对象内容. 很简单的一个例子, 1.首先在java层定义了一个类NumList: public class NumList { public ...