zoukankan      html  css  js  c++  java
  • 回顾JAVA---6. IO基础

    IO基础

    IO流

    (1)IO用于在设备间进行数据传输的操作
    (2)分类:
    A:流向
    输入流 读取数据
    输出流 写出数据
    B:数据类型
    字节流
    字节输入流 InputStream (FileInputStream  BufferedInputStream)
    字节输出流 OutputStream (FileOutputStream BufferedOutputStream)
    字符流
    字符输入流 Reader (FileReader BufferedReader)
    字符输出流 Writer (FileWriter BufferedWriter)
    注意:
    a:如果我们没有明确说明按照什么分,默认按照数据类型分。
    b:除非文件用windows自带的记事本打开我们能够读懂,才采用字符流,否则建议使用字节流。
    (3)FileOutputStream写出数据
    A:操作步骤
    a:创建字节输出流对象
    b:调用write()方法
    c:释放资源

    B:代码体现:
    FileOutputStream fos = new FileOutputStream("fos.txt");

    fos.write("hello".getBytes());

    fos.close();

    C:要注意的问题?
    a:创建字节输出流对象做了几件事情?
    b:为什么要close()?
    c:如何实现数据的换行?
    d:如何实现数据的追加写入?
    (4)FileInputStream读取数据
    A:操作步骤
    a:创建字节输入流对象
    b:调用read()方法
    c:释放资源

    B:代码体现:
    FileInputStream fis = new FileInputStream("fos.txt");

    //方式1
    int by = 0;
    while((by=fis.read())!=-1) {
    System.out.print((char)by);
    }

    //方式2
    byte[] bys = new byte[1024];
    int len = 0;
    while((len=fis.read(bys))!=-1) {
    System.out.print(new String(bys,0,len));
    }

    fis.close();

    字符流

    (1)字节流操作中文数据不是特别的方便,所以就出现了转换流。
       转换流的作用就是把字节流转换字符流来使用。
    (2)转换流其实是一个字符流
    字符流 = 字节流 + 编码表
    (3)编码表
    A:就是由字符和对应的数值组成的一张表
    B:常见的编码表
    ASCII
    ISO-8859-1
    GB2312
    GBK
    GB18030
    UTF-8
    C:字符串中的编码问题
    编码
    String -- byte[]
    解码
    byte[] -- String
    (4)IO流中的编码问题
    A:OutputStreamWriter
    OutputStreamWriter(OutputStream os):默认编码,GBK
    OutputStreamWriter(OutputStream os,String charsetName):指定编码。
    B:InputStreamReader
    InputStreamReader(InputStream is):默认编码,GBK
    InputStreamReader(InputStream is,String charsetName):指定编码
    C:编码问题其实很简单
    编码只要一致即可
    (5)字符流
    Reader
    |--InputStreamReader
    |--FileReader
    |--BufferedReader
    Writer
    |--OutputStreamWriter
    |--FileWriter
    |--BufferedWriter

    数据操作流(操作基本类型数据的流)

    (1)可以操作基本类型的数据
    (2)流对象名称
    DataInputStream
    DataOutputStream


    内存操作流

    (1)有些时候我们操作完毕后,未必需要产生一个文件,就可以使用内存操作流。
    (2)三种
    A:ByteArrayInputStream,ByteArrayOutputStream
    B:CharArrayReader,CharArrayWriter
    C:StringReader,StringWriter


    打印流

    (1)字节打印流,字符打印流
    (2)特点:
    A:只操作目的地,不操作数据源
    B:可以操作任意类型的数据
    C:如果启用了自动刷新,在调用println()方法的时候,能够换行并刷新
    D:可以直接操作文件
    问题:哪些流可以直接操作文件呢?
    看API,如果其构造方法能够同时接收File和String类型的参数,一般都是可以直接操作文件的
    (3)复制文本文件
    BufferedReader br = new BufferedReader(new FileReader("a.txt"));
    PrintWriter pw = new PrintWriter(new FileWriter("b.txt"),true);

    String line = null;
    while((line=br.readLine())!=null) {
    pw.println(line);
    }

    pw.close();
    br.close();

    标准输入输出流

    (1)System类下面有这样的两个字段
    in 标准输入流
    out 标准输出流
    (2)三种键盘录入方式
    A:main方法的args接收参数
    B:System.in通过BufferedReader进行包装
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    C:Scanner
    Scanner sc = new Scanner(System.in);
    (3)输出语句的原理和如何使用字符流输出数据
    A:原理
    System.out.println("helloworld");

    PrintStream ps = System.out;
    ps.println("helloworld");
    B:把System.out用字符缓冲流包装一下使用
    BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));


    随机访问流

    (1)可以按照文件指针的位置写数据和读数据。
    (2)案例:
    A:写数据
    B:读数据
    C:获取和改变文件指针的位置


    合并流

    (1)把多个输入流的数据写到一个输出流中。
    (2)构造方法:
    A:SequenceInputStream(InputStream s1, InputStream s2) 
    B:SequenceInputStream(Enumeration<? extends InputStream> e) 


    序列化流

    (1)可以把对象写入文本文件或者在网络中传输
    (2)如何实现序列化呢?
    让被序列化的对象所属类实现序列化接口。
    该接口是一个标记接口。没有功能需要实现。
    (3)注意问题:
    把数据写到文件后,在去修改类会产生一个问题。
    如何解决该问题呢?
    在类文件中,给出一个固定的序列化id值。
    而且,这样也可以解决黄色警告线问题
    (4)面试题:
    什么时候序列化?
    如何实现序列化?
    什么是反序列化?


    Properties

    (1)是一个集合类,Hashtable的子类
    (2)特有功能
    A:public Object setProperty(String key,String value)
    B:public String getProperty(String key)
    C:public Set<String> stringPropertyNames()
    (3)和IO流结合的方法
    把键值对形式的文本文件内容加载到集合中
    public void load(Reader reader)
    public void load(InputStream inStream)


    把集合中的数据存储到文本文件中
    public void store(Writer writer,String comments)
    public void store(OutputStream out,String comments)
    (4)案例:
    A:根据给定的文件判断是否有键为"lisi"的,如果有就修改其值为100
    B:写一个程序实现控制猜数字小游戏程序不能玩超过5次


    NIO

    (1)JDK4出现的NIO,对以前的IO操作进行了优化,提供了效率。但是大部分我们看到的还是以前的IO
    (2)JDK7的NIO的使用
    Path:路径
    Paths:通过静态方法返回一个路径
    Files:提供了常见的功能
    复制文本文件
    把集合中的数据写到文本文件
  • 相关阅读:
    SCILAB简介[z]
    UG OPEN API编程基础 2约定及编程初步
    Office 2003与Office 2010不能共存的解决方案
    UG OPEN API 编程基础 3用户界面接口
    NewtonRaphson method
    UG OPEN API编程基础 13MenuScript应用
    UG OPEN API编程基础 14API、UIStyler及MenuScript联合开发
    UG OPEN API编程基础 4部件文件的相关操作
    UG OPEN API编程基础 1概述
    16 UG Open的MFC应用
  • 原文地址:https://www.cnblogs.com/Amen-Z/p/8511986.html
Copyright © 2011-2022 走看看