首页 >Java >java教程 >Java之iO基础的详细介绍

Java之iO基础的详细介绍

零下一度
零下一度原创
2017-07-21 17:26:101512浏览

想记录一下这块由浅入深的学习过程。所以,接下来会记录几篇学习笔记,之后会有以前深入总结。因为这块比较重要啊,所以一定要学好。

一、IO的概述

IO: (Input Output)

--- 什么是流:

一组有顺序的、有起点和终点的数据集合,如文件流、网络流

--- 流与文件的区别:

文件是数据的静态存储方法。流是数据在传输时的一种形态。

java 对数据的操作都是通过流的方式,java 用于操作流的对象都在IO包中。

流按操作数据分为:

字节流(InputStream、OutputStream) 和 字符流(Reader、Writer)

其他所有的IO操作的类都是有它 们派生出来的

凡是属于字节流的 都是以 InputStream ,  OutputStream 为结尾,比如  FileInputStream, FileOutputStream 等

凡是属于字符流的,都是以   Reader  , Writer 为结尾 比如  FileReader, PrintWriter 等

流按流向分为:

输入流和输出流

 

二、字符流 Writer

字符流的结构(只以输出流为例)

Writer -- BufferedWriter

CharArrayWriter

OutputStreamWriter --FileWriter

FilterWriter  //过滤流

PipedWriter   //管道流

StringWriter

//例一 创建一个文件,写入一些内容   static void test() throws IOException{
    Writer wr=new FileWriter("c:/1.txt");  //把原来的内容覆盖了wr.write("这是一行文本");
    wr.write("\r\n"); //写入换行符wr.write("这是第二行文本"); //写到缓冲区中了wr.flush(); //刷新缓冲区wr.close(); //流使用完,一定要关闭    }                //FileWriter(String fileName, boolean append)  static void test2()throws IOException{
    Writer wr=new FileWriter("c:/1.txt",true);  //可以给第二个参数传true,表示以追回的方式写入wr.write("这是追加方式写入的内容");//wr.flush(); 有下面的close,这里不flush也可以           wr.close();
    }

三、标准的IO异常处理

代码示例:

import java.io.FileWriter;import java.io.IOException;import java.io.Writer;import java.util.ArrayList;import java.util.List;//把一份名单写入文件class Test16 {public static void main(String[] args) {

        List<String> nameList = new ArrayList<String>();
        nameList.add("PHP");
        nameList.add("Java");
        nameList.add("C#");
        nameList.add("C++");

        Writer wr = null;try {
            wr = new FileWriter("名单.exe");for (String name : nameList) {
                wr.write(name + "\r\n");
            }
        } catch (Exception ex) {throw new RuntimeException(ex);
        } finally {try {if (wr != null) {
                    wr.close();
                }
            } catch (IOException ex) {throw new RuntimeException(ex);
            }
        }
    }
}// 关键点,要在finally 中关闭资源,关闭的时候,不要忘了判断这个资源是不是null

四、字符流 Reader

//例子,从文件中读取数据

int read() 读取单个字符 //返回的是这个字符的编码值

int read(char[] cbuf) 将字符读入数组 //返回值是读到的字符个数,如果读到了末尾,返回-1(-1这个性质经常用到)

int read(char[] cbuf, int off, int len)  将字符读入数组的某一部分。

//从文件读取数据 (本例是一个字符一个字符的方式读的)static void test4() throws IOException {
    Reader  r=new FileReader("C:/名单.txt");int ch=0;while(( ch=r.read()) !=-1 ){
        System.out.println((char)ch);
        }        
    }
//从文件读取数据 ,做为了一个符串打印出来   static void test5() throws IOException {
    Reader  r=new FileReader("C:/1.txt");char [] buff=new char[1024];int count=r.read(buff);
    String str=new String(buff,0,count);
    System.out.println(str);
    r.close();
    }
Reader r= FileReader("E:\\FristOne\\src\\MyProject.java"Writer w= FileWriter("E:\\desc.txt" ch=0( (ch= r.read())!=-1

既然,有一个一个的复制,我们会想,怎么样才能让复制的效率变得更加高效呢?

我们可以定义一个容器,用它去块一块的去复制,效率就会更高了。下面是图形说明:

 代码示例:

Reader r=new FileReader("E:\\FristOne\\src\\MyProject.java");
    Writer w=new FileWriter("E:\\desc.txt");char [] buff=new char[1024];//定义一个容器//定义容器之后,会发生一些情况,比如取了几次以后,剩下部分的容量少于定义的容器的容量,这时候让它再去一次势必会有空余的空间被占位。这不是我们想要的,所以就引出下面这个含参的取法。int len=0; while( (len= r.read(buff))!=-1 ){
        w.write(buff,0,len);
    }
    r.close();
    w.close();

以上是Java之iO基础的详细介绍的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn