关闭。这个问题需要细节或清晰。它目前不接受答案。
**想改进这个问题吗?**通过编辑这个帖子来添加细节并澄清问题。
6年前关门了。
改进这个问题
我对java中file和filereader类之间的区别有点困惑,它们对我的工作方式都是一样的,它们可以获取文本文件并将其输入数组,但在这种情况下,哪一个更有效,哪一个最好。
我知道有人问过这样的问题,但他们倾向于关注特定的代码或两个类拥有的方法。
谢谢您。
关闭。这个问题需要细节或清晰。它目前不接受答案。
**想改进这个问题吗?**通过编辑这个帖子来添加细节并澄清问题。
6年前关门了。
改进这个问题
我对java中file和filereader类之间的区别有点困惑,它们对我的工作方式都是一样的,它们可以获取文本文件并将其输入数组,但在这种情况下,哪一个更有效,哪一个最好。
我知道有人问过这样的问题,但他们倾向于关注特定的代码或两个类拥有的方法。
谢谢您。
3条答案
按热度按时间syqv5f0l1#
使用
File
类来表示文件(即指向现有文件或您可能要创建的文件的路径)。使用
FileInputStream
(可能是用塑料袋包起来的BufferedInputStream
)如果你想读字节。使用
FileReader
(可能是用塑料袋包起来的BufferedReader
)如果要读取字符(即文本文件或类似文件)。您可能希望指定编码(如果您知道的话),或者更愿意依赖于系统(os)默认编码-这取决于您的用例。另外,编写通用实用程序方法时更倾向于只接受
InputStream
或者Reader
. 例如,public static void copy(Reader r, Writer w) throws IOException
更有用(可重用)比public static void copy(FileReader r, FileWriter w) throws IOException
. 一般来说,只有在不能使用更一般的抽象(如Reader
).kxxlusnw2#
就内存效率而言,fileinputstream更高效,因为它读取单个字节。filereader读取字符,每个字符有四个字节。
资料来源:http://nadeausoftware.com/articles/2008/02/java_tip_how_read_files_quickly#filereaderandbufferedreader
hgb9j2n63#
java.io.File
表示文件本身-它的存在,不管它是文件还是目录,它的最后修改日期,等等。您不能用中的任何方法读取文件的内容File
班级。但是,您可以使用
File
作为另一个类的输入,比如java.io.FileReader
,这样就可以读取文件的内容。最终,阅读文本文件的速度取决于你想用它们做什么。分析代码以查看哪个方法花费的时间最长。你可以用
java.io.FileReader
,java.util.Scanner
甚至java.nio.channels.FileChannel
结合java.nio.charset.CharsetDecoder
.正如您所说的您正在读取文本文件,您应该坚持使用用于读取字符流的类,而不是读取原始字节的类。这允许您正确地读取不仅仅是ascii字符。