• java学习一目了然——IO


    java学习一目了然——IO

    IO是java学习当中很重要的一部分.IO流实现数据的上传下载,即读写数据,包括输入和输出流,输入流指的是将数据以字符或字节形式从外部媒介比如文件、数据库等读取到内存中所以也分为字符输入流和字节输入流。

    数据类型:

    • 基本流(低级流)
        字节流 InputStream/OutputStream
        字符流 Reader/Writer(接口类型)
    
    • 高级流(处理流):对基本流进一步操作
    字符:
    Writer--FileWriter  
    Reader--FileReader
    字节:
    Writer--FileOutputStream
    Reader--FileInputStream
    
    Writer--FileWriter
    FileWriter(String filename);
    FileWriter(File file);
    write(int c); 写一个单独的字符(在缓冲区中)
    write(char cbuf[], int off, int len) 写入字符数组(在缓冲区中)
    public void write(String str, int off, int len) 写入字符串(在缓冲区中)
    flush(); 刷新缓冲区,将数据真正写入文件,注意这里的写入为修改,而不是追加
    close(); 刷新缓冲区,关闭流对象,释放相关资源
    

    构造函数FileWriter(String filename,boolean isAppend)中boolean参数为true时,write()方法为追加

    这里的write方法介绍三种种重载

    1. 写入单个字符

      int c = 0; //初始化
      while((c=fr.read())!=-1){
          fw.write(c);
      }
      
    2. 写入字符数组

      char[] chs = new char[1024];
      int len = chs.length;
      while(fr.read(chs)!=-1){
          fw.write(chs,0,len); //添加字符数组的长度,为了防止写入时缓冲区未写满而产生多余数据
      }
      
    3. 写入字符串

      char[] chs = new char[1024];
      int len = chs.length;
      while((len = fr.read(chs))!=-1){
          fw.write(new String().valueOf(chs,0,len));
          //fw.write(new String().valueOf(chs), 0 , len);
      }
      

    flush方法为刷新缓冲区,在flush方法使用之后write方法写入的数据才真正有效.而close方法调用的同时,会自动将缓冲区flush一下,然后关闭流.

    Reader--FileReader
     FileReader(String filename);
     FileReader(File file);
     int read() 返回读入单一字符对应的int值,并将read位置移到下一位.如果没有读到,返回-1
     int read(char cbuf[]) 返回多字符值
     int read(char cbuf[], int off, int len) 
    

    注意:read和write(Writer类中)其中一个使用三参数的重载即可

    代码见FileWriter
    
    Writer--FileOutputStream
    write(char);
    write(int);
    write(byte[]);//因为是字节流,write没有参数为String的重载
    write(byte[],int off,int len);最常用
    
    Reader--FileInputStream
    read(byte[]);
    
    高效流:
    BufferedWriter(Writer w);
    BufferedReader(Reader r);
    使用方法同上
    
    BufferedWriter:
        write(String);
        newLine(); 换行
    BufferedReader
        String readLine(); 读取一行信息
    
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new FileWriter("out.txt"));
    
        String line = null; //初始化
        while((line = br.readLine())!= null){
            if(line.equals("quit")){
                break; //读取到退出信息
            }
            else{
                //写入数据三步:写入-换行-刷新
                bw.write(line);
                bw.newLine();
                bw.flush();
            }
        }
        bw.close();
        br.close();
    
    字节流与字符流的转化:
    字节流转换字符流:
    InputStreamReader(InputStream); 此时InputStringReader对象将InputStream对象转换为字符流
    常用于键盘输入(字节流)的保存或输出(字符流)
    注意:键盘输入时的System.in为InputStream类型
    因此,高效转换过程为BufferedReader br = new
    BufferedReader(new InputStreamReader(System.in));
    
    字符流转换字节流:
    与之相似,常用于键盘输出
    BufferedWriter(new OutputStreamWriter(System.out));
    
    Properties(Map)
    Properties可保存到流中也可从流中加载
    Object setProperties(String key,String value); 添加
    String getProperties(String key)
    Set<StringstringPropertyNames()
    
    Properties实现集合与IO流的拼接
    void load(InputStream is);
    void load(Reader r); 读到的文件输入流按照格式直接存入Properties的Map集合中
    
    void store(OutputStream os,String comments);
    void store(Writer w,String comments);以键值对的形式写入文件
    
    打印流
    直接操作文件
    PrintWriter(File file);
    PrintWriter(String filePath);(不自动刷新缓冲区)
    
    PrintWriter(OutputStream os);
    PrintWriter(Writer w); println自动刷新缓冲区
    
    print(...);
    println(...); println在某些情况下可以自动刷新缓冲区,具体情况如上
    当println方法自动刷新时,相当于BufferedWriter中的writer(ln);newLine();flush();三个方法
  • 相关阅读:
    关于电商开发中金额的数据存储
    java编程IO简单回顾和学习
    不同数据源之间的数据同步jdbc解决方案
    简单的dialog,类似alert弹框
    PageInfo 前台分页js,带分页栏
    oracle 操作,偶尔记一下
    时间控件My97简单用法
    时间控件格式化,有了他,我再也不怕格式化时间了
    oracle 数据库io 异常,错误代码17002 解决办法
    列表渲染
  • 原文地址:https://www.cnblogs.com/sunnysola/p/4914891.html
Copyright © 2020-2023  润新知