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