【学习笔记】java IO编程2

类 InputStream

 此抽象类是表示字节输入流的所有类的超类。

需要定义 InputStream 子类的应用程序必须总是提供返回下一个输入字节的方法。 

注意红色部分

 

举个例子:

package com.study2;



import java.io.File;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.IOException;

import java.io.InputStream;



public class Input {

    public static void main(String[] args) {

        // Input.cannotReadChinese(); //无法读取中文

        Input.canReadChinese(); // 字节流的形式读取中文字符,不推荐

    }

    

    /**

     * 字节流的形式读取中文字符,不推荐

     */

    private static void canReadChinese() {

        File file = new File("C:\\Users\\hlwyf_000\\Desktop\\test.txt");

        InputStream inputstream = null;

        try {

            inputstream = new FileInputStream(file);

            try {



                byte[] b = new byte[50]; // 定义一个缓冲数组

                int i = 0;

                inputstream.available();

                int temp = inputstream.available();

                while ((i = inputstream.read(b, 0, b.length)) != -1) { // 输出整个缓冲数组

                    //如果使用下面的这种String方法,将定性输出50个字节,可能出现乱码

                    System.out.print(new String(b, 0 , i));//查看文档,String的一个构造函数

                }

                System.out.println(inputstream.available());

            } catch (IOException e) {



                e.printStackTrace();

            }

        } catch (FileNotFoundException e) {

            e.printStackTrace();

        } finally {

            if (inputstream != null) {

                try {

                    inputstream.close();

                } catch (IOException e) {

                    e.printStackTrace();

                }

            }

        }

    }



    private static void cannotReadChinese() {

        // 读不出来的原因,因为一个中文字符占两个字节,所以有中文的话,最好用字符流读出来

        // 但是字节流也是可以读的,需要换一些方式来读取

        File file = new File("C:\\Users\\hlwyf_000\\Desktop\\test.txt");

        InputStream inputstream = null;

        try {

            inputstream = new FileInputStream(file);

            try {

                inputstream.available();

                int temp = inputstream.available();

                for (int i = 0; i < temp; i++) {

                    System.out.print((char) inputstream.read());

                }

                System.out.println(inputstream.available());

            } catch (IOException e) {



                e.printStackTrace();

            }

        } catch (FileNotFoundException e) {



            e.printStackTrace();

        } finally {

            if (inputstream != null) {

                try {

                    inputstream.close();

                } catch (IOException e) {

                    e.printStackTrace();

                }

            }

        }



    }

}

 

OutputStream

package com.study3;



import java.io.File;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.OutputStream;



public class TestOutputStream {

    public static void main(String[] args) {

        TestOutputStream.fileoutput();

    }



    private static void fileoutput() {

        File file = new File("C:\\Users\\hlwyf_000\\Desktop\\Newtest.txt");

        OutputStream output = null;

        try {

            output = new FileOutputStream(file);// FileOutputStream是OutputStream的一个子类

            try {

                output.write('H');

                output.write('e');

                output.write("你好啊!".getBytes());//write(byte[]);

            } catch (IOException e) {

                e.printStackTrace();

            }

            

        } catch (FileNotFoundException e) {

            e.printStackTrace();

        }finally{

            if (output != null) {

                try {

                    output.close();

                } catch (IOException e) {

                    e.printStackTrace();

                }

            }

        }

    }

}

 

文件复制:

package com.study4;



import java.io.FileInputStream;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.InputStream;

import java.io.OutputStream;



public class Testone {



    public static void main(String[] args) {

        Testone.copyFile("C:\\Users\\hlwyf_000\\Desktop\\软件工程2-7.需求工程.ppt", "E:\\Java学习\\java\\第11章 文件 I O 编程\\abc.ppt");

    }

    public static void copyFile(String str, String dest){

        InputStream inputstream = null;

        OutputStream outputstream = null;

        try{

            inputstream = new FileInputStream(str); //注意此处要传入文件,写在括号里面

            outputstream = new FileOutputStream(dest);

            int i = 0;

            byte[] b = new byte[10240];//以10K为单位进行传输 

            /**

             * read()返回读入缓冲区的总字节数,用i来获取,所以下面的outputstream最后一个参数用i

             */

            while ((i = inputstream.read(b, 0, b.length)) != -1){

                outputstream.write(b, 0, i);//写入目标文件

                outputstream.flush();//刷新

            }

            

        }catch(Exception e){

             e.printStackTrace();

        }finally{

            if(inputstream != null){

                try {

                    inputstream.close();

                } catch (IOException e) {

                    e.printStackTrace();

                }

            }

            if(outputstream != null){

                try {

                    outputstream.close();

                } catch (IOException e) {

                    e.printStackTrace();

                }

            }

        }

        

    }



}

复制完成后,格式什么的都不变,一模一样复制!

 

文件剪切,删除复制后原来的文件即可!

 

DataInputStream 和 DataOutputStream 的使用

package com.study4;



import java.io.DataInputStream;

import java.io.DataOutputStream;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.InputStream;

import java.io.OutputStream;



public class TestTwo {

    public static void main(String[] args) {

        TestTwo.datainput(); //写入

        TestTwo.dataoutput();//读出

    }



    private static void dataoutput() {

        File file = new File("C:\\Users\\hlwyf_000\\Desktop\\Newtest.txt");

        InputStream inputstream = null; //建立一个抽象类对象,赋值为空

        DataInputStream datainputstream = null; //建立一个对象,对象为空

        try {

            inputstream = new FileInputStream(file); //重点

            datainputstream = new DataInputStream(inputstream); //重点

            int i = datainputstream.readInt();

            char a = datainputstream.readChar();

            boolean flag = datainputstream.readBoolean();

            double d = datainputstream.readDouble();

            String s = datainputstream.readUTF();

            System.out.println(i);

            System.out.println(a);

            System.out.println(flag);

            System.out.println(d);

            System.out.println(s);



        } catch (Exception e) {

            e.printStackTrace();

        } finally {

            if (datainputstream != null) {

                try {

                    datainputstream.close();

                } catch (IOException e) {

                    e.printStackTrace();

                }

            }

            if (datainputstream != null) {

                try {

                    datainputstream.close();

                } catch (IOException e) {

                    e.printStackTrace();

                }

            }

        }

    }



    private static void datainput() {

        File file = new File("C:\\Users\\hlwyf_000\\Desktop\\Newtest.txt");

        OutputStream outputStream = null;

        DataOutputStream dataOutputStream = null;

        try {

            outputStream = new FileOutputStream(file); // 注意,OutputStream是一个抽象类

            dataOutputStream = new DataOutputStream(outputStream); // 参见文档

            int i = 12;

            char a = '他';

            boolean flag = false;

            double d = 12.3456;

            String str = "这是一个字符串";



            dataOutputStream.writeInt(i);

            dataOutputStream.writeChar(a);

            dataOutputStream.writeBoolean(flag);

            dataOutputStream.writeDouble(d);

            dataOutputStream.writeUTF(str);

        } catch (Exception e) {

            e.printStackTrace();

        } finally {

            if (dataOutputStream != null) {

                try {

                    dataOutputStream.close();

                } catch (IOException e) {

                    e.printStackTrace();

                }

            }

            if (outputStream != null) {

                try {

                    outputStream.close();

                } catch (IOException e) {

                    e.printStackTrace();

                }

            }

        }



    }

}

 

字符流

字符流的作用_读取字符

字符流与字节流的使用场合



字节流读写二进制文件。

字符流读写文本文件。

 

Reader的体系结构

 

 

 

Writer体系结构

 

 

使用方法和字节流基本一致。

 

你可能感兴趣的:(java io)