Java FileReader

时间:2020-02-23 14:36:34  来源:igfitidea点击:

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文件之类的二进制文件。