0

下面的程序应该打印出String“Humpty Dumpty sat on a wall,\n Humpty Dumpty has a great fall”。到一个文件并输入回来。

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 nawl, upyDmt a ra al?”!另外,当我打开文件“Test.txt”时,我发现输出String变成了“Humpty Dumpty sat on a wall, Humpty Dumpty has a great fall”。在一行中。去哪儿了\n

4

4 回答 4

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;
于 2012-12-18T14:27:41.487 回答
1

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

于 2012-12-18T14:28:35.060 回答
0

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

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

前面多余的空格通过一个.trim()方法去掉。

于 2012-12-20T10:58:26.157 回答
0

正如 Hunter 所说,您需要将代码更改为此

char c;
while((c=in.read()) != -1)
input += c;
于 2012-12-18T14:29:30.430 回答