2009-11-20 69 views
4

的FileInputStream读取文件的所有字节和FileOutputStream中写入allbytes到一个文件的FileInputStream和FileOutputStream中逐行

哪个班做,如果我想按行读入一个文件,但行的所有字节我用

使得

如果的fileA包含两行

LINE1 LINE2

然后字节LINE1和LINE2读seperately

同样适用于FileOutputStream中

+0

“行”意味着文本数据。 “输出流”意味着二进制数据。 这是什么? – 2009-11-21 17:29:58

回答

12

弗雷德里克是正确的约BufferedReader,但我不同意PrintWriter - 我与PrintWriter问题是,它燕子例外。

值得理解为什么FileInputStreamFileOutputStream没有任何与行有关的方法:*Stream类是关于二进制数据流的。就二进制数据而言,不存在“线”这样的事情。 *Reader*Writer类是关于文本,其中行的概念使更多的意义上......虽然一般Reader没有足够的智能来读取一行(只是一个字符块),所以这就是BufferedReader

InputStreamReaderOutputStreamWriter是适配器类,将字符编码应用到字节流以将它们转换为字符,或将字符流转换为字节流。

所以,你可能想要一个BufferedReader包装InputStreamReader包装FileInputStream阅读 - 然后呼吁readLine()。对于书写,请使用BufferedWriter环绕OutputStreamWriter环绕FileOutputStream - 然后拨打write(String)newLine()。 (这会给你的平台默认的行分隔符 - 如果你想要一个特定的一个,只是把它写为一个字符串。)

也有在FileReader类排序结合FileInputStreamInputStreamReader(和FileWriter不等价),但这些总是使用平台的默认编码,这几乎是从来没有你想要的。这使得他们几乎没有任何IMO。

+0

我同意PrintWriter有缺点,但它是最接近问题的那个。我开始建议一个作家,但它确实不会“逐行”。好点(+1)。 – Fredrik 2009-11-20 07:20:49

+0

@Fredrik:这不是你的错,Java库设计者决定给PrintWriter太多的责任:( – 2009-11-20 07:31:26

+0

@Jon:谢谢:-)我知道,我只是想解释为什么我推荐它。 – Fredrik 2009-11-20 11:56:20

相关问题