15.IO流

概念

1个字符 = 2个字节 1个字节=8个二进制

输入:把硬盘的数据,读取到内存中

输出:把内存的数据,写入到硬盘中

字节流

一切文件数据 都是以字节存储

字节输出流

OutputStream

  • public void close() :关闭此输出流并释放与此流相关联的任何系统资源。
  • public void flush() :刷新此输出流并强制任何缓冲的输出字节被写出。
  • public void write(byte[] b):将 b.length字节从指定的字节数组写入此输出流。
  • public void write(byte[] b, int off, int len) :从指定的字节数组写入 len字节,从偏移量 off开始输出到此输出流。
  • public abstract void write(int b) :将指定的字节输出流。

FileOutputStream:文件字节输出流

  1. 作用:把内存中的数据写入到硬盘中
  2. 构造方法 :

public FileOutputStream(File file):创建文件输出流以写入由指定的 File对象表示的文件。

public FileOutputStream(String name): 创建文件输出流以指定的名称写入文件。

构造方法作用:

  1. 创建一个FileOutputStream对象
  2. 会根据传递的文件/文件路径 创建一个空文件
  3. 会把FileOutputStream对象指向创建好的文件

写入数据的原理(内存->硬盘)
java程序->JVM->OS->调用写数据方法->数据写入文件

字节输出流步骤
  1. 创建一个FileOutputStream对象,构造方法中传递参数
  2. 调用FileOutputStream对象中的write方法,把数据写入文件中
  3. 释放资源
public static void main(String[] args) throws IOException {
        FileOutputStream fileOutputStream = new FileOutputStream("F://a.txt");
        fileOutputStream.write(97);
        fileOutputStream.close();
    }

写出字节write(int b) 方法,每次可以写出一个字节数据

写出字节数组write(byte[] b),每次可以写出数组中的数据

追加写入:在构造方法中添true

  public static void main(String[] args) throws IOException {
        //在FileOutputStream("路径",true) append:true 等于追加
        FileOutputStream fileOutputStream = new FileOutputStream("F://a.txt",true);
        fileOutputStream.write("第一次追加写入".getBytes());
        fileOutputStream.close();
    }
字节输入流

读取硬盘中文件的字节

构造方法:

  • FileReader(File file): 创建一个新的 FileReader ,给定要读取的File对象。
  • FileReader(String fileName): 创建一个新的 FileReader ,给定要读取的文件的名称。

方法:read()

public static void main(String[] args) throws IOException {
        FileInputStream f = new FileInputStream("f:\\a.txt");
        //读取文件中的一个字节并返回,读取到文件末尾返回-1
        int len = f.read();
        System.out.println(len);
        f.close();
    }

循环读取文件字节

public static void main(String[] args) throws IOException {
        FileInputStream f = new FileInputStream("f:\\a.txt");
        int len = 0;
        //while循环读取字节,返回-1就结束
        while((len = f.read())!=-1){
            System.out.print((char)len); //abc
        }
        f.close();
    }

读取多个字节方法 : int read(byte[] b)

字符流

字符输入流

使用字节流会出现小问题:读取中文可能读不全 (GDK占2个字节 UTF-8占3个字节)

Reader字符输入流,是字符输入流最顶层的父类,是一个抽象类

FileReader:文件字符输入流

 public static void main(String[] args) throws IOException {
        FileReader reader = new FileReader("F:\\a.txt");
        char[] c = new char[1024];
        int len = 0;
        while((len = reader.read(c))!=-1){
            System.out.println(new String(c,0,len));
        }
        reader.close();
    }
字符输出流

FileWriter:文件字符输出流(把内存中字符数据写入到文件中)

 public static void main(String[] args) throws IOException {
        // 使用文件名称创建流对象
        FileWriter fw = new FileWriter("f1.txt");
        fw.write(97);
        fw.write("你好");
        fw.write("写入数据");
        //注意:一定要释放资源,要不然只在缓冲区,不能保存到内容
        fw.close();
    }
}

续写和换行:
构造方法里的append

换行:\r\n

关闭与刷新

flush :刷新缓冲区,流对象可以继续使用。

close:先刷新缓冲区,然后通知系统释放资源。流对象不可以再被使用了

flush后还能继续写入内容,close后就不能继续写入内容了

IO异常的处理

使用try catch finally处理流中的异常

public static void main(String[] args) {
        //定义变量
        FileWriter fw = null;
        //可能出现异常的代码块
        try {
            //创建字符输出流对象,并且追加
             fw = new FileWriter("fw.txt",true);
            for(int i =0;i<10;i++){
                fw.write("hello"+i);
                //换行
                fw.write("\r\n");
            }

        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            //释放资源
            if(fw!=null){
                try {
                    fw.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }

JDK新特性

JDK7的新特性,在try后面加(),可以定义流对象,自动释放资源

 public static void main(String[] args) {
        try( FileInputStream fi = new FileInputStream("F://a.txt");
             FileOutputStream fo = new FileOutputStream("a1.txt",true);) {
            //输出到文件
            int len = 0;
            while((len=fi.read())!=-1){
                fo.write(len);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

JDK9的新特性,try的前边可以定义流的对象,try后边的()引入流的对象名称
格式:

    A a = new A();
    B b = new B();
    try(a,b){
        
    }catch(){
        
    }

属性值

Properties 类 代表一个持久的属性值 唯一和IO流结合的集合

方法:

  1. store方法,把集合临时数据,持久化写入硬盘中存储
  2. load方法,把硬盘中保存的文件(键值对) 读取到集合中

Properties集合是一个双列集合,key vuale 默认都是字符串

  1. Object setProperty(String key,String value) 调用hashtable的方法put
  2. String getProperty(String key) 通过key值找到vaule
  3. Set stringPropertyNames() 返回属性列表的键值
   public static void main(String[] args) {

        //创建Properties对象
        Properties properties = new Properties();
        properties.setProperty("范冰冰","170");
        properties.setProperty("杨幂","168");
        properties.setProperty("余香","175");

        //使用stringPropertyNames把键存储进Set集合
        Set<String> set = properties.stringPropertyNames();
        
        //循环取出key
        for (String s : set) {
            System.out.println(s+properties.getProperty(s));
        }

    }

使用字符输出流对Properties进行存储

  public static void main(String[] args) throws IOException {
        //创建Properties对象
        Properties properties = new Properties();
        properties.setProperty("范冰冰","170");
        properties.setProperty("杨幂","168");
        properties.setProperty("余香","175");

        //创建FileWrite对象进行字符输出
        FileWriter fw = new FileWriter("prop.txt");
        //使用properties的store(Write流对象,”注释“)
        properties.store(fw,"save date");

        fw.close();
    }s

使用字符输入流对Properties进行读取

  public static void main(String[] args) throws IOException {
      //使用Properties的load方法
        Properties prop = new Properties();
        prop.load(new FileReader("prop.txt"));

        //遍历输出
        Set<String> strings = prop.stringPropertyNames();
        //取出key
        for (String key : strings) {
            String value = prop.getProperty(key);
            System.out.println(key+"="+value);
        }
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
城市应急指挥系统是智慧城市建设的重要组成部分,旨在提高城市对突发事件的预防和处置能力。系统背景源于自然灾害和事故灾难频发,如汶川地震和日本大地震等,这些事件造成了巨大的人员伤亡和财产损失。随着城市化进程的加快,应急信息化建设面临信息资源分散、管理标准不统一等问题,需要通过统筹管理和技术创新来解决。 系统的设计思路是通过先进的技术手段,如物联网、射频识别、卫星定位等,构建一个具有强大信息感知和通信能力的网络和平台。这将促进不同部门和层次之间的信息共享、交流和整合,提高城市资源的利用效率,满足城市对各种信息的获取和使用需求。在“十二五”期间,应急信息化工作将依托这些技术,实现动态监控、风险管理、预警以及统一指挥调度。 应急指挥系统的建设目标是实现快速有效的应对各种突发事件,保障人民生命财产安全,减少社会危害和经济损失。系统将包括预测预警、模拟演练、辅助决策、态势分析等功能,以及应急值守、预案管理、GIS应用等基本应用。此外,还包括支撑平台的建设,如接警中心、视频会议、统一通信等基础设施。 系统的实施将涉及到应急网络建设、应急指挥、视频监控、卫星通信等多个方面。通过高度集成的系统,建立统一的信息接收和处理平台,实现多渠道接入和融合指挥调度。此外,还包括应急指挥中心基础平台建设、固定和移动应急指挥通信系统建设,以及应急队伍建设,确保能够迅速响应并有效处置各类突发事件。 项目的意义在于,它不仅是提升灾害监测预报水平和预警能力的重要科技支撑,也是实现预防和减轻重大灾害和事故损失的关键。通过实施城市应急指挥系统,可以加强社会管理和公共服务,构建和谐社会,为打造平安城市提供坚实的基础。
### 回答1: B'15.java中IO流分为几种?' A: 在Java中,IO流分为四种类型:字节流(InputStream, OutputStream)和字符流(Reader, Writer),又分为输入流和输出流。 ### 回答2: 在 Java 中,IO 流可以分为四种类型:字节流、字符流、缓冲流和数据流。 1. 字节流:字节流以字节为单位读取和写入数据,通常用于读取和写入二进制文件,如图像和音频文件。字节流分为输入流和输出流,分别用于从文件读取数据和将数据写入文件。 2. 字符流:字符流以字符为单位读取和写入数据,通常用于读取和写入文本文件。与字节流不同,字符流不仅可以读取和写入纯文本数据,还可以处理其他格式的文本数据,如 XML 和 HTML。 3. 缓冲流:缓冲流提高了 IO 操作的效率,在读写数据时预读和预写数据,将数据先存储在缓存区中,再逐块传输。这些流可以加快程序处理大文件和大数据量的速度。 4. 数据流:数据流是一种特殊的字节流,可以方便地读取和写入 Java 基本数据类型和对象。它具有多种方法可以读取或写入整数、字符串、布尔值等等。 总之,Java 中的 IO 流提供灵活和易于使用的方式来读取和写入数据。无论您要读取或写入二进制文件、文本文件或其他格式的数据,都可以使用适当类型的 IO 流。 ### 回答3: Java中的IO流主要分为4类:输入流、输出流、字符流和字节流。 输入流用于读取数据,可分为字节输入流和字符输入流。字节输入流读取字节数据,字符输入流读取字符数据。常用的字节输入流包括FileInputStream、ObjectInputStream、ByteArrayInputStream等;常用的字符输入流包括FileReader、InputStreamReader等。 输出流用于写入数据,可分为字节输出流和字符输出流。字节输出流写入字节数据,字符输出流写入字符数据。常用的字节输出流包括FileOutputStream、ObjectOutputStream、ByteArrayOutputStream等;常用的字符输出流包括FileWriter、OutputStreamWriter等。 字符流和字节流的主要区别在于字节流是以字节为单位进行输入输出的,而字符流则是以字符为主,同时字符流会对数据进行编码解码操作,而字节流不会。 除了字节流和字符流,Java还提供了处理二进制数据的RandomAccessFile类,以及用于序列化和反序列化对象的ObjectInputStream和ObjectOutputStream类。 总之,Java中的IO流提供了丰富的API和功能,开发者可以根据不同的需求选择合适的IO流实现代码功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值