Java FileReader
Java FileReader
Java FileReader类是java.io软件包的一部分。
FileReader是InputStreamReader类的子类。
与FileInputStream相比,建议使用Java FileReader从文件中读取文本数据。
FileReader用于读取字符流。
因此,读取基于字符串的数据是一个不错的选择。此类的构造函数假定默认字符编码和默认字节缓冲区大小是适当的。
FileReader通常由诸如BufferedReader之类的高级对象包装,这些对象可以提高性能并提供处理数据的更便捷方法。
FileReader构造函数
让我们快速看一下FileReader的构造函数。
FileReader(File file):使用要读取的指定文件对象创建一个新的FileReader对象。
如果该文件不存在,不是目录而是常规文件,或者由于某些其他原因而无法打开进行读取,则它将抛出FileNotFoundException。FileReader(FileDescriptor fd):使用要读取的指定FileDescriptor对象创建一个新的FileReader对象。
FileReader(String fileName):使用要读取的文件的指定名称创建一个新的FileReader对象。
如果命名文件不存在,不是目录而是常规文件,或者由于某些其他原因而无法打开进行读取,则它将抛出FileNotFoundException。
Java FileReader示例
让我们看一下FileReader类的以下方法和示例程序。
read()
此方法读取单个字符。
该方法将阻塞,直到有字符可用,发生I/O错误或者到达流的末尾为止。
它返回读取的字符,范围为0到65535(0x00-0xffff)之间的整数,如果已到达流的末尾,则返回-1。
让我们看下面的示例程序。
package com.theitroad.examples;
import java.io.File;
import java.io.FileReader;
/**
* Java Read file FileReader
*
* @author hyman
*
*/
public class FileReaderReadExample {
public static void main(String[] args) {
File file = null;
FileReader reader = null;
try {
file = new File("D:/data/file.txt");
reader = new FileReader(file);
int i;
while ((i=reader.read())!= -1) {
System.out.print((char)i);
}
} catch (Exception e) {
e.printStackTrace();
}finally {
try {
if (reader != null) {
reader.close();
}
} catch (Exception e2) {
e2.printStackTrace();
}
}
}
}
上面程序的输出如下:
Hello World. This is a FileReader Example.
FileReader实现了AutoCloseable接口,因此我们可以在使用FileReader类时尝试使用资源。
让我们看下面的示例程序。
package com.theitroad.examples;
import java.io.File;
import java.io.FileReader;
/**
* Java Read file FileReader using try with resource
*
* @author hyman
*
*/
public class FileReaderReadUsingTryWithResource {
public static void main(String[] args) {
File file = new File("D:/data/file.txt");
try (FileReader reader = new FileReader(file);){
int i;
while ((i=reader.read())!= -1) {
System.out.print((char)i);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
上面程序的输出如下:
Hello World. This is a FileReader Example.
读(char [] cbuf)
此方法将字符读入数组。
该方法将阻塞,直到有可用的输入,发生I/O错误或者到达流的末尾为止。
它返回读取的字符数,如果已到达流的末尾,则返回-1。
让我们看下面的示例程序。
package com.theitroad.examples;
import java.io.File;
import java.io.FileReader;
/**
* Java Read file FileReader using read(char[] cbuf) method
*
* @author hyman
*
*/
public class ReadFileUsingFileReader {
public static void main(String[] args) {
File file = new File("D:/data/file.txt");
try (FileReader reader = new FileReader(file);){
char[] cs = new char[100];
reader.read(cs);
for (char c : cs) {
System.out.print(c);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
上面程序的输出如下:
Hello World. This is a FileReader Example.
read(char [] cbuf,int关闭,int len)
此方法将字符读入数组的一部分。
该方法将阻塞,直到某些输入可用,发生I/O错误或者到达流的末尾为止。
它返回读取的字符数,如果已到达流的末尾,则返回-1。
参数:
- cbuf:目标缓冲区
- off:开始存储字符的偏移量
- len:要读取的最大字符数
package com.theitroad.examples;
import java.io.File;
import java.io.FileReader;
/**
* Java Read file FileReader using read(char[] cbuf, int off, int len) method
*
* @author hyman
*
*/
public class ReadFileUsingFileReaderExample {
public static void main(String[] args) {
File file = new File("D:/data/file.txt");
try (FileReader reader = new FileReader(file);){
char[] cs = new char[100];
reader.read(cs, 0, 11);
for (char c : cs) {
System.out.print(c);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
//Output: Hello World
读取(CharBuffer目标)
此方法将字符读入指定的字符缓冲区。
该缓冲区按原样用作字符存储库:所做的唯一更改是放置操作的结果。
不执行缓冲区的翻转或者倒带。
它返回添加到缓冲区的字符数;如果此字符源在末尾,则返回-1。
package com.theitroad.examples;
import java.io.File;
import java.io.FileReader;
import java.nio.CharBuffer;
/**
* Java Read file FileReader using CharBuffer
*
* @author hyman
*
*/
public class ReadFileUsingFileReaderCharBuffer {
public static void main(String[] args) {
File file = new File("D:/data/file.txt");
try (FileReader reader = new FileReader(file);){
//create char buffer with the capacity of 50
CharBuffer cs = CharBuffer.allocate(50);
//read characters into char buffer
reader.read(cs);
//flip char buffer
cs.flip();
System.out.println(cs.toString());
} catch (Exception e) {
e.printStackTrace();
}
}
}
跳过(长n)
此方法跳过n个字符,并返回跳过的字符数。
package com.theitroad.examples;
import java.io.File;
import java.io.FileReader;
/**
* Java Read file FileReader using skip method
*
* @author hyman
*
*/
public class FileReaderSkipExample {
public static void main(String[] args) {
File file = null;
FileReader reader = null;
try {
file = new File("D:/data/file.txt");
reader = new FileReader(file);
//skip first 6 characters
reader.skip(6);
int i;
while ((i=reader.read())!= -1) {
System.out.print((char)i);
}
} catch (Exception e) {
e.printStackTrace();
}finally {
try {
if (reader != null) {
reader.close();
}
} catch (Exception e2) {
e2.printStackTrace();
}
}
}
}
输出:
World. This is a FileReader Example.
Java FileReader与FileInputStream
FileReader用于读取字符流,而FileInputStream用于读取字节流(如原始图像数据)。
FileReader适合读取Java源代码文件之类的文本文件,而FileInputStream适合读取.class文件之类的二进制文件。

