java_IO流

Posted aihuadung

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java_IO流相关的知识,希望对你有一定的参考价值。

 

IO流概述及分类

Reader  InputStream  OutputStream  Writer都是Object的直接子类

字节流:

         字节输入流 InputStream(抽象类)

                   |---FileInputStream(子类)

         字节输出流 OutputStream(抽象类)

                   |---FileOutputStream(子类)

 

字符流:

         字符输入流 Reader(抽象类)

                   |--- FileReader(子类)

         字符输出流 Writer(抽象类)

                   |--- FileWriter(子类)

 

一.字节输入流FileInputStream

注意:java中所有输入流在构造时文件必须存在,否则抛出异常

构造方法:

         FileInputStream is=new FileInputStream(File file);

FileInputStream is=new FileInputStream(String path);

 

常用读取方法:

         read()  返回值为int数值,含义是通过read方法读取的一个字节根据ascll码表转换成int类型数字

         read(byte[] byte) :读取文件,到byte数组中,返回值为int类型,表示读取的字节数目

 

 

二.字节输出流FileOutputStream

注意:无论是字符输出流还是字节输入流,创建流对象如果没设置附加的话就会清空文件

         FileOutputStream os=new FileOutputStream(File file);

FileOutputStream os=new FileOutputStream(String path);

FileOutputStream os=new FileOutputStream(File file,Boolean append);

FileOutputStream os=new FileOutputStream(String path,Boolean append);

 

 

常用输出方法:

         write(byte[]byte)

         write(byte[] byte,int off,int len)

         write(int n);

 

 

三.字符流概述

1).为什么要有字符流字节流字节来操作文件但各国使用的字符所占的字节数不同有些占一个字节

       有些占2个字节,有些占3个字节,所以如果使用字节流来操作这种纯文本文件,非常不方便。所以Java又制作

       了字符流--可以按字符读、写,不论这个字符占几个字节,字符流都会保证能够完整的读取一个字符。

    2).字符流也是基于字节流

    3).字符流的作用:只能操作纯文本文件

 

四.字符输出流Writer

 

1).write(int c):输出一个字符;

    2).write(char[] chArray):输出一个字符数组;

    3).write(char[] chArray,int off,int len):输出字符数组的一部分;

 

    4).write(String str):输出一个字符串;

    5).write(String str,int off,int len):输出字符串的一部分;

    使用它的子类:FileWriter

 

1).追加写入使用构造方法,第二个参数为:true

            FileWriter(String name,boolean append):

            FileWriter(File name,boolean append)

    2).输出换行:

            out.write("\r\n");

 

 

五.字符输入流Reader

1).读取的方法(两个)

        1).int read():读取一个“字符”;      返回值为这个字符对应的数字

        2).int read(char[] chArray):读取一个“字符数组”;   返回值为读取字符的个数

六.IO异常的处理_JDK7前的处理方式

  

public class Demo {
    public static void main(String[] args)  {
        FileWriter out = null;
        try {
            out = new FileWriter("demo07.txt");
            out.write("呵呵");
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            if(out != null) {
                try {
                    out.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

 

 

七.IO异常的处理_JDK7后的处理方式

注意:使用jdk7之后版本的try可以不用关闭流,jvm会自动关闭

    try后的小括号中可以写多句话,中间用分号隔开

注意:try中内容最好不要有匿名内部类,因为try不会自动关闭

 

 

public class Demo {
    public static void main(String[] args) {
        try (FileWriter out = new FileWriter("demo08.txt")) {
            out.write("喜喜");
        } catch (IOException e) {

        }
        //当try...catch语句执行完毕,out会自动关闭
    }
}

 

 

 

八.属性集_Properties类概述

    1).java.util.Properties():它本质上是一个Map集合。它有两个方法可以结合IO很方便的操作配置文件

    2).什么是配置文件:指软件运行时,需要记录一些用户的、软件的一些配置信息,它是纯文本文件,通用格式:

                test.properties

                ------------------------------------------

                金币=100000

                钻石=5000

                点券=1000

                疲劳=120

            注意:配置文件中数据的格式:名=值,这种格式正好跟我们的"键值对--Map"的结构匹配。

                 所以Java单独做了一个Map集合,目的就是可以结合IO流很方便的读写这种配置文件。

九.属性集_Properties类与流相关的方法介绍

         Properties继承自Hashtable,包含操作map的几乎所有方法,也有它自己独有的方法,

         java.util.Properties是针对于配置文件的一个类,只能操作字符串,无论是key还是value

    1).写:store(FileWriter out,String com)

    2).读:load(FileReader in)

    示例代码:

  

public class Demo {
    public static void main(String[] args) {
//        writeFile();
        readFile();
    }

    private static void readFile() {
        Properties pro = new Properties();

        try (FileReader in = new FileReader("demo09.txt")) {
            pro.load(in);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        //遍历
        Set<String> keys = pro.stringPropertyNames();//相当于:Map-->keySet()
        for (String k : keys) {
            System.out.println(k + "," + pro.getProperty(k));//相当于:Map--get(Object key)
        }
    }

    public static void writeFile(){
        Properties pro = new Properties();

        pro.setProperty("金币", "10000");//相当于Map--put(Object key,Object value)
        pro.setProperty("钻石", "5000");
        pro.setProperty("疲劳", "120");
        pro.setProperty("点券", "3000");

        //存储到文件
        try (FileWriter out = new FileWriter("demo09.txt")) {
            pro.store(out, "Hello");
        } catch (IOException e) {
            e.printStackTrace();
        }

    }
}

 

以上是关于java_IO流的主要内容,如果未能解决你的问题,请参考以下文章

Java_IO流——File类

Java_IO流_File类配合使用(其中用到了递归)

java_IO_3

java_io学习_编码

24(java_io from keyboard)

Java IO 概念探寻