使用FileInputStream的文件输入无法正常工作

时间:2012-12-18 14:23:58

标签: java file-io newline fileinputstream

下面的程序应该打印String“Humpty Dumpty坐在墙上,\ n Humpty Dumpty坠落很大。”到一个文件并输回。

package io;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.PrintStream;

public class ByteIO {

    /**
     * @param args
     */
    public static void main(String[] args) {
        String output = "Humpty Dumpty sat on a wall,\n Humpty Dumpty had a great fall.";
        System.out.println("Output String : " + output);
        try(PrintStream out = new PrintStream("F:\\Test.txt")) {
            out.println(output);
        } catch(FileNotFoundException e) {
            e.printStackTrace();
        }

        String input = "";
        try(FileInputStream in = new FileInputStream("F:\\Test.txt")) {
            while(in.read() != -1)
                input += (char)in.read();
        } catch(FileNotFoundException e) {
            e.printStackTrace();
        } catch(IOException e) {
            e.printStackTrace();
        }
        System.out.println("Input String : " + input);
    }
}

然而,我从String获得的FileInputStream是“upyDmt a a nawl,upyDmt a ra al?”!此外,当我打开文件“Test.txt”时,我发现输出String变成了“Humpty Dumpty坐在墙上,Humpty Dumpty坠落了。”在一条线上。 \n去了哪里?

4 个答案:

答案 0 :(得分:4)

您正在拨打in.read()两次:

while(in.read() != -1)
    input += (char)in.read();

每次迭代而不是一次读取两个字符,因此每次都有效地丢弃一个字符。

尝试将字符存储在while条件中,然后将该字符添加到input

编辑:基于JavaNewbie_M107的评论

int i;    
while((i = in.read()) != -1)
   input += (char)i;

答案 1 :(得分:1)

对于第二部分,Windows(以及记事本等许多应用程序)无法识别\ n作为新行。在Windows中,\ r \ n标记一个新行。尝试使用更严肃的编辑程序打开(写字板应该足够),你会看到它格式正确。

答案 2 :(得分:0)

正如亨特所说,你需要将你的代码改为

char c;
while((c=in.read()) != -1)
input += c;

答案 3 :(得分:0)

这是解决我问题的正确方法:

int i = 0;
char c;
    do {
        c = (char)i;
        input += c;
        i = in.read();
    } while(i != -1);

使用.trim()方法删除前面的额外空格。