天天看点

JAVA中的IO流-FileReader类

FileReader类: 用于读取字符流的一个类

构造方法:

FileReader(File file) 
创建一个新的 FileReader ,给出 File读取。  

FileReader(FileDescriptor fd) 
创建一个新的 FileReader ,给定 FileDescriptor读取。  

FileReader(String fileName) 
创建一个新的 FileReader ,给定要读取的文件的名称。  
           

方法:

.read()
	读取一个字符

	.read(char[] cbuf)
	读取一个字符串
	.......
	很多重载的方法
	
	.close()
	关闭流
	
	.....
	还有可以看API
           

例子:

这里把异常抛出,不进行捕捉了

demo.txt 文本文件中放着

abcde

import java.io.FileReader;
import java.io.IOException;

public class Demo {
    public static void main(String[] args) throws IOException {
        FileReader fr = new FileReader("demo.txt");

        int ch = fr.read(); //读取一个
        System.out.println(ch); 输出
    }
}
           

运行结果:

97

如果要让它输出原本的a,则需要进行强制类型转换

运行结果:

a

如果我们想要它全部输出的话,可以用循环

import java.io.FileReader;
        import java.io.IOException;

public class Demo {
    public static void main(String[] args) throws IOException {
        FileReader fr = new FileReader("demo.txt");

        int ch= 0;
        while((ch = fr.read()) != -1) {
            System.out.print((char)ch); //输出
        }
    }
}
           

运行结果:

JAVA中的IO流-FileReader类

利用数组进行存储再进行读取

例子:

import java.io.FileReader;
        import java.io.IOException;

public class Demo {
    public static void main(String[] args) throws IOException {
        FileReader fr = new FileReader("demo.txt");
		
		char[] ch = new char[3];
		
		int len = 0;
		len = fr.read(ch);
		System.out.println(len+":"+new String(ch));
    }
}
           

运行结果:

JAVA中的IO流-FileReader类

如果我们多次取值呢?

import java.io.FileReader;
import java.io.IOException;

public class Demo {
    public static void main(String[] args) throws IOException {
        FileReader fr = new FileReader("demo.txt");
		
		char[] ch = new char[3];
		
		int len = 0;
		len = fr.read(ch);
		System.out.println(len+":"+new String(ch));
		len = fr.read(ch);
		System.out.println(len+":"+new String(ch));
		len = fr.read(ch);
		System.out.println(len+":"+new String(ch));
    }
}
           

运行结果:

JAVA中的IO流-FileReader类

为什么会这样子呢?

我们第一次的时候数组是空的

于是把abc放进去之后

len = 3

JAVA中的IO流-FileReader类

后面继续读取 因为后面已经没有空间了,所以会重头开始

于是len = 2

JAVA中的IO流-FileReader类

因为第三次读取因为已经到底了

len = -1 告知错误

所以还是输出原来的

JAVA中的IO流-FileReader类

所以我们可以重新写一个输出

例子:

import java.io.FileReader;
import java.io.IOException;

public class Demo {
    public static void main(String[] args) throws IOException {
        FileReader fr = new FileReader("demo.txt");
		
		char[] ch = new char[3];
		
		int len = 0;
		while((len = fr.read(ch)) != -1) {
			System.out.println(len+":"+new String(ch,0,len));
		}
    }
}
           

运行结果:

JAVA中的IO流-FileReader类