Heim  >  Artikel  >  Java  >  Detaillierte Einführung in die Grundlagen von iO in Java

Detaillierte Einführung in die Grundlagen von iO in Java

零下一度
零下一度Original
2017-07-21 17:26:101454Durchsuche

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

一、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();

Das obige ist der detaillierte Inhalt vonDetaillierte Einführung in die Grundlagen von iO in Java. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn