Java基础——iO(一)

此文为了解IO知识的基础篇,这块我看了几天,感觉和前段时间学习集合一样,零散又重要。想记录一下这块由浅入深的学习过程。所以,接下来会记录几篇学习笔记,之后会有以前深入总结。因为这块比较重要啊,所以一定要学好。

一、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();
    }  
//例子 文件复制 ,把C盘上的某个文件复制到E盘//这样的复制是将字符一个一个的复制,很显然,它的效率比较低!
Reader r=new FileReader("E:\\FristOne\\src\\MyProject.java");
//注意:路径的反斜杠要用转义
    Writer w=new FileWriter("E:\\desc.txt");
        int ch=0;
        while( (ch= r.read())!=-1  ){
    w.write(ch);
    }
    r.close();
    w.close()

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

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

代码示例:

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

关于IO的知识确实蛮多的,下篇待续咯......

时间: 2024-08-07 12:42:11

Java基础——iO(一)的相关文章

黑马程序员——Java基础---IO(下)

黑马程序员——Java基础---IO(下) ------<a href="http://www.itheima.com" target="blank">Java培训.Android培训.iOS培训..Net培训</a>.期待与您交流! ------ 一.概述 Java除了基本的字节流.字符流之外,还提供了File类.properties类.打印流.序列流等和输入输出相关的类,它们能够帮助我们更好的处理信息.下面将对它们进行简单的介绍. 一.正

黑马程序员——java基础---IO(input output)流字符流

黑马程序员——java基础---IO(input output)流字符流 ------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- io(input output)流特点: 1,io流用来处理数据之间的传输 2,java对数据的操作是通过流的方式: 3,java用于操作流的对象都在io包中: 4,流按操作数据分为两种:字节流和字符流: 5,流按流向分为:输入流和输出流. 注意:流只能操作数据,而不能操作文件. 3.IO流的常用基类: 1)字节流的抽象

黑马程序员——Java基础---io(上)

黑马程序员——Java基础---io(上) ------<a href="http://www.itheima.com" target="blank">Java培训.Android培训.iOS培训..Net培训</a>.期待与您交流! ------ 一.概述 Java I/O系统负责处理程序的输入和输出,I/O类库位于java.io包中,它对各种常见的输入流和输出流进行了抽象.如果数据流中最小的数据单元是字节,那么称这种流为字节流:如果数据流

1.JAVA基础——IO

1.流的概念 一个对输入输出设备的抽象概念,JAVA中文件的操作都是以“流”的方式进行.可以把流理解成“管道”,数据通过管道得以从一端传输到另一端. 流具有方向性:一般而言这个方向是以程序作为参照,所以,输入流是指输向程序的流,输出流是指从程序输出的流:也可以理解成,程序从输入流获取数据,向输出流写数据. 流式输入输出的特点为:数据的获取和发送沿数据序列的顺序进行,即每一个数据都必须等待排在它前面的数据,等前面的数据读入或送出后才能被读写.因此,流和队列一样,只能以“先进先出”的方式对其中的数据

JAVA 基础 IO操作

java.io操作是java基础中的基础,如果没有io操作程序都不会运行起来,所以,又回顾了一下java.io操作的内容,里面的对象序列化是J2EE的基础,是java中分布式部署和调用实现的基础,还有很有对文件系统.对网络资源的读写等等. 对于里面的个人觉的比较重要的知识做了一个图总结了一下.如下: 这里对于重点的理解和使用总结几点 1.概念理解 对于java.io的概念一直理解的有点偏差,首先这里面涉及到一个方向性的概念,即我们数据从哪里来到哪里去,在java.io操作中以及里面的很多概念和类

Java基础IO流(一)

IO概念: 大多数应用程序都需要实现与设备之间的数据传输,例如键盘可以输入数据,显示器可以显示程序的运行结果等.在Java中,将这种通过不同输入输出设备(键盘,内存,显示器,网络等)之间的数据传输抽象表述为"流",程序允许通过流的方式与输入输出设备进行数据传输.Java中的"流"都位于java.io包中,成为IO(输入输出)流. IO分类: IO流有很多种,按照操作数据的不同,可以分为字节流和字符流,按照数据传输方向的不同又可以分为输入流和输出流,程序从输入流中读取

黑马程序员——java基础IO流——字符流缓冲区和字节流

字符流的缓冲区 l  缓冲区的出现提高了对数据的读写效率. l  对应类 ?    BufferedWriter ?    BufferedReader l  缓冲区要结合流才可以使用. l  在流的基础上对流的功能进行了增强. 1, BufferedWriter 每次可以写入一行,缓冲区的出现是为了提高流的操作效率而出现的.所以在创建缓冲区之前,必须要先有流对象.该缓冲区中提供了一个跨平台的换行符,newLine(); /* 缓冲区的出现是为了提高流的操作效率而出现的. 所以在创建缓冲区之前,

Java基础---IO(三)--IO包中的其他类

第一讲     对象序列化 一.概述 将堆内存中的对象存入硬盘,保留对象中的数据,称之为对象的持久化(或序列化).使用到的两个类:ObjectInputStream和ObjectOutputStream 二.特有方法 ObjectInputStream: Object readObject();//从ObjcetInputStream中读取对象 ObjectOutputStream: void writeObject(Objcet obj);//将指定对象写入ObjcetOutputStream

黑马程序员--Java基础--IO基本操作

基本IO操作 1. InputStream与OutputStream 1.1. 输入与输出 我们编写的程序除了自身会定义一些数据信息外,经常还会引用外界的数据,或是将自身的数据发送到外界.比如,我们编写的程序想读取一个文本文件,又或者我们想将程序中的某些数据写入到一个文件中.这时我们就要使用输入与输出. 什么是输入:输入是一个从外界进入到程序的方向,通常我们需要"读取"外界的数据时,使用输入.所以输入是用来读取数据的. 什么是输出:输出是一个从程序发送到外界的方向,通常我们需要&quo