码迷,mamicode.com
首页 > 编程语言 > 详细

【学习笔记】java IO编程2

时间:2015-04-15 22:41:27      阅读:177      评论:0      收藏:0      [点我收藏+]

标签:

类 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编程2

标签:

原文地址:http://www.cnblogs.com/hlwyfeng/p/4427562.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!