java的IO流之字符流

# 原创,转载请留言联系

  • 输出流

FileWriter类

常见的构造方法:

FileWriter(String fileName)     根据给定的文件名构造一个 FileWriter 对象。
FileWriter(String fileName, boolean append)       根据给定的文件名以及指示是否附加写入数据的 boolean 值来构造 FileWriter 对象。

String fileName代表的是文件的路径,如果没有这个文件,会自动创建。

 

常见的方法:

1.write

void write(String str):写一个字符串数据
void write(String str,int index,int len):写一个字符串中的一部分数据
void write(int ch):写一个字符数据,这里写int类型的好处是既可以写char类型的数据,也可以写char对应的int类型的值。'a',97
void write(char[] chs):写一个字符数组数据
void write(char[] chs,int index,int len):写一个字符数组的一部分数据

2.close

object.close()   关闭文件,释放资源

3.flush

object.flush()  刷新缓冲区。流对象还可以继续使用。

注意其和close()的区别,close是先刷新缓冲区,然后通知系统释放资源。流对象不可以再被使用了。

所以说close在释放资源前会刷新一次缓冲区。

 

  • 输入流

FileReader类

常见的构造方法:

FIleReader(String FileName)    在给定从中读取数据的文件名的情况下创建一个新 FileReader。

 

常见的方法:

1.read()

read()方法    一次只读一个字符,返回的是对应的编码值,int类型。

示例:

public class FileReaderDemo {
    public static void main(String[] args) throws IOException {
        FileReader fr = new FileReader("/home/chichung/桌面/test");
        int ch = fr.read();
        System.out.println(ch);
        System.out.println((char)ch);
        fr.close()
    }

注意,当没有数据可以读时,返回值是int -1。可以根据这个结束条件写一个循环把所有数据读出来。

public class FileReaderDemo {
    public static void main(String[] args) throws IOException {
        FileReader fr = new FileReader("/home/chichung/桌面/test");
        int ch;
        while ((ch=fr.read()) != -1){
            System.out.print((char)ch);
        }
        fr.close();  // 记得释放资源
    }
}

 

2.read(char[] cbuf)

当文件很大时,一个一个字符去读取效率太低了。所以一般是多个字符一起读取。read方法可以接收一个字符数组。一般数组的长度定义为1024或整数倍,视内存而定。

示例:

public class FileReaderDemo2 {
    public static void main(String[] args) throws IOException {
        char[] arr = new char[3];  // 这里只是实验才用的3,具体情况视内存而定
        FileReader fr = new FileReader("/home/chichung/桌面/test");
        int len;
        // len=fr.read(arr) len是实际读到的长度(int),不是数组的长度!
        // 当没有新内容可读时,返回值是int -1
        while ((len= fr.read(arr)) != -1){  
            System.out.print(new String(arr,0,len));  // String构造方法直接把字符数组转换为字符串
        }
        fr.close();
    }
}

 

说了这么多,其实上面两个都用得不多(滑稽.jpg)

用得比较多是BufferedWriter和BufferReader类。

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

  • BufferedWriter类

将文本写入字符输出流,缓冲字符,以提供单个字符,数组和字符串的高效写入。
可以指定缓冲区大小,或者可以接受默认大小。 默认值足够大,可用于大多数用途。

常用构造方法:

BufferedWriter(Writer out)    创建使用默认大小的输出缓冲区的缓冲字符输出流。

示例:

BufferedWriter bw = new BufferedWriter(new FileWriter("/home/chichung/桌面/test.txt));

常用方法:

FileWriter的方法都有。

比较特别的是,BufferedWriter类有newLine()方法。

这个方法十分有用。它是写入一个换行符。

windows的换行符是\r\n,linux的换行符是\n,mac的换行符是\r。

newLine()方法可以根据不同的系统,写入合适的换行符!

 

  • BufferedReader类

从字符输入流读取文本,缓冲字符,以提供字符,数组和行的高效读取。
可以指定缓冲区大小,或者可以使用默认大小。 默认值足够大,可用于大多数用途。

常见的构造方法:

BufferedReader(Reader in)     创建使用默认大小的输入缓冲区的缓冲字符输入流。

示例:

BufferedReader br = new BufferedReader(new FileReader("/home/chichung/桌面/test"));

常见的方法:

FileReader的方法都有。

比较特别的是,BufferedReader类有readLine()方法。

readLine()方法是一次读一行。需要注意的是,与read()不同,当没有东西可读的是,readLine()返回的是null,read()返回的是-1。

posted @ 2018-12-29 20:42  苦瓜爆炒牛肉  阅读(484)  评论(3编辑  收藏  举报