Java 为什么我不能在输入字符时打印整个字符?

Java 为什么我不能在输入字符时打印整个字符?,java,file-io,fileinputstream,filewriter,bufferedinputstream,Java,File Io,Fileinputstream,Filewriter,Bufferedinputstream,作为一名业余java学习者,我尝试了java文件和i/O方法的不同组合,当我尝试这段代码时,我想通过我的代码打印我在文件tom.txt中输入的任何内容(我知道我想要什么可以通过使用其他方法轻松完成),我的代码如下: import java.io.*; public class Dhoom3 { public static void main(String[] args) throws IOException, NullPointerException { FileWriter b =

作为一名业余java学习者,我尝试了java文件和i/O方法的不同组合,当我尝试这段代码时,我想通过我的代码打印我在文件
tom.txt
中输入的任何内容(我知道我想要什么可以通过使用其他方法轻松完成),我的代码如下:

import java.io.*;
public class Dhoom3 
{
public static void main(String[] args) throws IOException,  NullPointerException
{
    FileWriter b = new FileWriter(new File("tom.txt")); 
    System.out.println(" enter whatever : ");
    b.write(System.in.read());
    b.flush();
    System.out.println("the printed characters are");
    FileInputStream r = new FileInputStream("tom.txt");
    BufferedInputStream k = new  BufferedInputStream(r);
    int g;
    while((g = k.read())!= -1)
    {
        System.out.println((char)g);
    }
 }

}
我的输出是:

 enter whatever : 
 stack
 the printed characters are
 s
我在哪里犯了错误,或者我应该在哪里修改我的程序?基本上,为什么我的代码只打印第一个字符?

您的错误正在使用

System.in.read()
读取输入

System.in.read仅读取输入的一个字节

更好的替代方法是使用扫描仪。扫描仪可以扫描多个字节的信息,因此它们更适合您的工作

要修复代码,请执行以下操作:

1) 创建一个新的扫描仪对象,如下所示:

Scanner scanner = new Scanner(System.in);
2) 将System.in.read替换为:

scanner.next()

您只从系统输入中读取了一个字符,这就是写入文件的字符(为了方便起见,您可能需要使用
扫描仪
。@Mena我应该如何修改它?你能建议一种方法吗?@Mena so read()方法一次只读取一个字符?如果我仍然想对系统输入使用read()方法,比如如果我使用for或while循环,可以修改它吗?