IO流 1、IO流

1、IO流

1.1、IO概述

  • 列IO流用来处理设备之间的数据传输
  • 列Java对数据的操作是通过流的方式
  • 列Java用于操作流的对象都在IO包中
  • 列流按操作对象分为两种:字节流与字符流,字节流可以操作任何数据,字符流只能操作纯字符数据比较方便。
  • 列流按流向分为:输入流,输出流。

1.2、IO流结构图

1.3、字节流


以上我常用的就是FileInputStream以及FileOutputStream。我比较喜欢直接上干货,所以直接用代码通过几个例子来讲解字节流的实现过程。

package com.io;
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;
/**
 * 从程序把数据写出到磁盘
 * @author Administrator
 *
 */
public class Demo1 {
    public static void main(String[] args) {
        try {
            //1.使用File类找到一个文件对象,得到IO操作的源或目标
            File file = new File("F:/test.txt");
            //2.通过字节流或字符流的子类创建对象,(得到IO操作的通道)
            //OutputStream os = new FileOutputStream(file);
            OutputStream os = new FileOutputStream(file, true);
            //3.进行读或写的操作,(IO操作)
            byte[] b = "hello word!".getBytes();
            os.write(b);
            //os.write("hello word!".getBytes());
            //4.关闭输入/输出,(打完收工,注意节约资源,关掉)
            os.close();
            System.out.println("操作完成!");
        } catch (Exception e) {
            e.printStackTrace();
            System.out.println("文件找不到!");
        }
    }
}
package com.io;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
/**
 * 从磁盘把数据文件读出到程序
 * @author Administrator
 *
 */
public class Demo2 {
    public static void main(String[] args) {
        try {
            //1.使用File类找到一个文件对象,得到IO操作的源或目标
            File file = new File("F:\\test.txt");
            //2.通过字节流或字符流的子类创建对象,(得到IO操作的通道)
            InputStream is = new FileInputStream(file);
            //3.进行读或写的操作,(IO操作)
            byte[] b = new byte[512];
            while(is.read(b) != -1){
                String str = new String(b);
                System.out.println(str);
            }
            //4.关闭输入/输出,(打完收工,注意节约资源,关掉)
            is.close();
            System.out.println("操作完成!");
        } catch (Exception e) {
            e.printStackTrace();
            System.out.println("文件找不到!");
        }
    }
}

1.4字符流


我常用的是FileReader以及WriterReader。上干货

package com.io;
import java.io.File;
import java.io.FileWriter;
import java.io.Writer;
/**
 * 通过字符流把数据写到磁盘文件
 * @author Administrator
 *
 */
public class Demo3 {
    public static void main(String[] args) {
        try {
            //1.使用File类找到一个文件对象,得到IO操作的源或目标
            File file = new File("F:/test.txt");
            //2.通过字节流或字符流的子类创建对象,(得到IO操作的通道)
            Writer writer = new FileWriter(file);
            //3.进行读或写的操作,(IO操作)
            writer.write("你好,张文!");
            //4.关闭输入/输出,(打完收工,注意节约资源,关掉)
            writer.close();
            System.out.println("操作完成!");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
package com.io;
import java.io.File;
import java.io.FileReader;
import java.io.Reader;
/**
 * 通过字符流把文件内容读到程序中
 * @author Administrator
 *
 */
public class Demo4 {
    public static void main(String[] args) {
        try {
            //1.使用File类找到一个文件对象,得到IO操作的源或目标
            File file = new File("F:/test.txt");
            //2.通过字节流或字符流的子类创建对象,(得到IO操作的通道)
            Reader reader = new FileReader(file);
            //3.进行读或写的操作,(IO操作)
            char[] b = new char[512];
            int num = 0;
            while((num = reader.read(b)) != -1){
                String str = new String(b, 0, num);
                System.out.println(str);
            }
            //4.关闭输入/输出,(打完收工,注意节约资源,关掉)
            reader.close();
            System.out.println("操作完成!");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

接下来写一个copy的程序,把某个文件复制到另外的地方:

package com.io;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;

/**
 * 复制文件到某个目录
 * @author Administrator
 *
 */
public class Demo5 {
    public static void main(String[] args) {
        File f1 = new File("D:\\IMG_9214s.jpg");
        File f2 = new File("E:\\zhangwen.jpg");
        copy(f1, f2);
    }
    
    /**
     * 
     * @param f1源文件
     * @param f2复制文件
     */
    public static void copy(File f1, File f2){
        try {
            //1、分别创建输入流和输出流,通过字节流或字符流的子类创建对象,(得到IO操作的通道)
            InputStream is = new FileInputStream(f1);
            OutputStream os = new FileOutputStream(f2);
            //2、读写操作(边读边写)先读再写
            byte[] b = new byte[512];
            //先读取
            int num = is.read(b);
            while(num != -1){
                //开始写
                os.write(b);
                num = is.read(b);
            }
            //3.关闭输入/输出,(打完收工,注意节约资源,关掉)
            is.close();
            os.close();
            System.out.println("操作成功!");
        } catch (Exception e) {
            System.out.println("文件找不到!");
        }
    }
}

1.5缓冲流

IO的缓冲区的存在就是为了提高效率,把要操作的数据放进缓冲区,然后一次性把缓冲区的内容写到目的地,而不是写一次就往目的地写一次。

package com.io;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
/**
 * 字符输入缓冲流
 * @author Administrator
 *
 */
public class Demo6 {
    public static void main(String[] args) throws IOException {
        //1、创建文件对象
        File file = new File("H:/软考真题/20170323_IO流/20170323_IO流/笔记/IO和XML.txt");
        //2、创建流对象
        BufferedReader bf = new BufferedReader(new FileReader(file));
        //3、读操作
        String str = null;
        while((str = bf.readLine()) != null){
            System.out.println(str);
        }
        //4、关闭流释放资源
        bf.close();
    }
}
package com.io;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
/**
 * 字符输出缓冲流
 * @author Administrator
 *
 */
public class Demo7 {
    public static void main(String[] args) throws IOException {
        //1、创建文件对象
        File file = new File("H:/test.txt");
        //2、创建流对象
        BufferedWriter bw = new BufferedWriter(new FileWriter(file));
        //3、输出操作
        bw.write("你好JAVA!");
        //4、关闭流
        bw.close();
    }
}

1.6转换流

打印流:该流提供了打印方法,可以将各种数据类型的数据都原样打印。

package com.io;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.Writer;
/**
 * 转换输出流
 * @author Administrator
 *
 */
public class Demo8 {
    public static void main(String[] args) throws IOException {
        //1、创建文件对象
        File file = new File("H:/test.txt");
        //2、创建转换流,字节流转换为字符流
        Writer writer = new OutputStreamWriter(new FileOutputStream(file));
        //3、输出操作
        writer.write("转换输出流!");
        //4、关闭流
        writer.close();
    }
}

1.7打印流

打印流:该流提供了打印方法,可以将各种数据类型的数据都原样打印。

package com.io;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.PrintWriter;
/**
 * 字符打印输出流
 * @author Administrator
 *
 */
public class Demo9 {
    public static void main(String[] args) throws FileNotFoundException {
        //1、创建文件对象
        File file = new File("H:/test.txt");
        //2、创建打印流
        PrintWriter printWriter = new PrintWriter(file);
        //3、输出操作
        printWriter.write("你好打印流!");
        //4、关闭流
        printWriter.close();
        printWriter.flush();
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章