Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用FileInputStream的文件输入无法正常工作_Java_File Io_Newline_Fileinputstream - Fatal编程技术网

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

Java 使用FileInputStream的文件输入无法正常工作,java,file-io,newline,fileinputstream,Java,File Io,Newline,Fileinputstream,下面的程序应该将字符串“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 { /** * @pa

下面的程序应该将
字符串
“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);
    }
}

然而,我从
文件输入流中得到的
字符串是“upyDmt a nawl,upyDmt a ra al?”!另外,当我打开文件“Test.txt”时,我发现输出
字符串
变成了“Humpty Dumpty坐在墙上,Humpty Dumpty摔了个大跤”。
\n
到哪里去了?

您在.read()中调用
两次:

while(in.read() != -1)
    input += (char)in.read();
这将在每次迭代中读取两个字符,而不是一个字符,因此每次实际上都会丢弃一个字符

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

编辑:基于JavaNewbie_M107的评论

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

您正在.read()中调用
两次:

while(in.read() != -1)
    input += (char)in.read();
这将在每次迭代中读取两个字符,而不是一个字符,因此每次实际上都会丢弃一个字符

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

编辑:基于JavaNewbie_M107的评论

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

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

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

正如亨特所说,你需要将你的代码改成这个

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

正如亨特所说,您需要将代码更改为

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

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

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

使用
.trim()
方法去除前面多余的空间。

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

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

使用
.trim()
方法删除前面多余的空间。

文件在那里,\n但您的编辑器可能不会显示它。关于您的输入:您的循环被中断,因为它只提供第二个字符。您应该在写入和读取文件之间关闭该文件。@JavaNewbie在得到解决方案时始终接受答案。@PeterLawrey不是必需的,因为我使用了try with resources:文件在try块的末尾自动关闭。@JavaNewbie\u M107使用try with将解决这个问题。我会抓住例外,除非你对它们做些有用的事情。如果您没有捕获到异常,它将打印出异常。\n在那里,但是您的编辑器可能不会显示它。关于您的输入:您的循环被中断,因为它只提供第二个字符。您应该在写入和读取文件之间关闭该文件。@JavaNewbie在得到解决方案时始终接受答案。@PeterLawrey不是必需的,因为我使用了try with resources:文件在try块的末尾自动关闭。@JavaNewbie\u M107使用try with将解决这个问题。我会抓住例外,除非你对它们做些有用的事情。如果你没有捕捉到异常,它会打印出来。你的代码的问题是
char
c永远不会返回-1,相反,它会一直返回零,从而设置一个无限循环。@JavaNewbie\u M107你完全正确,我之前错过了。我将进行编辑。您的代码的问题是,
char
c永远不会返回-1,相反,它会一直返回零,从而设置一个无限循环。@JavaNewbie\u M107您完全正确,我之前错过了。我将进行编辑。