java IO (一)

package cn.sasa.demo2;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

import javax.management.RuntimeErrorException;

public class IODemo1 {
    public static void main(String[] args) throws IOException {
        /**
         * 字节流 、 字符流 
         * 程序到文件,输出 output 
         * 文件到程序,输入 input
         * 
         */
        //output();
        //outputAppend();
        //tryIOException();
        input();
    }

    /***
     * 文件的写入 java.io.OutputStream 所有字节输出流的父类
     * 
     * 作用: 从java程序 写出文件 写任意文件
     * 
     * write(int b) 写入一个字节 write(byte[] b) 写入字节数组 
     * write(byte[] b, int off, int len)
     * close() 关闭流对象,释放资源 flush()
     * 
     * FileOutputStream 写入数据文件
     * 
     * 步骤: 
     * 1、创建流子类的对象,绑定数据目的, 流对象的构造方法可以创建文件,如果文件存在,那么覆盖原有的文件 
     * 2、调用write
     * 3、close()释放资源
     * 
     */
    static void output() throws IOException {
        FileOutputStream output = new FileOutputStream("d:/sasa/test1221.txt");
        // 写入一个字节
        // output.write(97);

        // 写入字节数组
        byte[] writeByte = { 97, 98, 99, 100 };
        output.write(writeByte);

        // 写字节数组的一部分
        output.write(writeByte, 1, 2);

        // 写入字符串的字节数组
        output.write("lalala".getBytes());

        output.close();
        System.out.println("ok");
    }

    /***
     * 文件的续写和换行
     * @throws IOException 
     * 
     */
    static void outputAppend() throws IOException {
        File file = new File("d:/sasa/test1221.txt");
        //第二个参数表示在原来的基础上追加字节
        FileOutputStream output = new FileOutputStream(file, true);
        output.write("hello".getBytes());
        
        //换行 \r\n
        output.write("\r\n".getBytes());
        output.write("blabla".getBytes());
        
        output.close();
        System.out.println("ok");
    }

    /***
     * IO流的异常处理
     * try  catch  finally
     */
    static void tryIOException() {
        FileOutputStream output = null;
        try {
           output = new FileOutputStream("d:/sasa/test1221.txt",true);
           output.write(100);
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            System.out.println(e.getMessage());
            throw new RuntimeErrorException(null, "文件写入失败");
        }finally {
            try {
                //对象如果建立失败,没有占用资源,不用释放
                if(output != null)
                    output.close();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
                throw new RuntimeErrorException(null, "关闭资源失败");
            }
        }
    }
    
    /***
     * 字节输入流
     * java.io.InputStream 所有字节输入流的父类
     * 作用:读取任意文件,每次读取1字节
     * 
     * int read()读取1字节
     * int read(byte[] b)
     * 
     * FileInputStream 读取文件
     * 步骤:
     * 1、创建字节输入流的子类对象
     * 2、调用read() 每执行一次,自动读取下一个字节,返回值返回读取到的字节,如果是结尾,则返回-1
     * 3、关闭资源
     * @throws IOException 
     */
    static void input() throws IOException {
        FileInputStream input = new FileInputStream("d:/sasa/test1221.txt");
        //读取一个字节
//        int readInt = input.read();
//        System.out.println(readInt);
//        int readInt1 = input.read();
//        System.out.println(readInt1);
//        int readInt2 = input.read();
//        System.out.println(readInt2);
//        int readInt3 = input.read();
//        System.out.println(readInt3);
        
//        int content = 0;
//        while((content = input.read()) != -1) {
//            //content = input.read();
//            System.out.print((char)content);
//        }
        
//        //int read(byte[] b) 读取字节数组 
//        byte[] inputByte = new byte[2];//2字节2字节读取
//        int len = input.read(inputByte);//返回的是读取到的有效字节,-1表示已读完
//        System.out.println(new String(inputByte));
//        System.out.println(len);
        
        int len = 0;
        byte[] inputByte = new byte[4];
        while((len = input.read(inputByte)) != -1) {
            System.out.print(new String(inputByte,0,len));
        }
        
        input.close();
    }
}

 

posted @ 2018-12-24 15:14  SasaL  Views(169)  Comments(3Edit  收藏  举报