java - 扫描仪仅读取字符串的第一个标记

标签 java java.util.scanner java-io filereader filewriter

Java 语言新手,

以下是我的代码。但是,整个字符串不会写入文件。仅第一个标记会写入文件。有什么解释吗?

import java.io.FileWriter;
import java.io.IOException;
import java.util.Scanner;


public class FichierTexteWrite {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub

        try {
            System.out.println("Entrez le nom d'un fichier :");
            Scanner in = new Scanner(System.in);
            String filename = in.next();
            FileWriter fwrite = new FileWriter(filename);
            System.out.println("Entrez une phrase a memoriser");
            fwrite.write(in.next());
            System.out.println("Writing on file complete ");
            fwrite.close();
        }catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

我也尝试过 nextLine() 方法,但这似乎没有帮助。它强行写入一个空白字符并终止程序。

---编辑---

我也尝试过:

import java.io.FileWriter;
import java.io.IOException;
import java.util.Scanner;


public class FichierTexteWrite {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub

        try {
            System.out.println("Entrez le nom d'un fichier :");
            Scanner in = new Scanner(System.in);
            String filename = in.next();
            FileWriter fwrite = new FileWriter(filename);
            System.out.println("Entrez une phrase a memoriser");
            fwrite.write(in.nextLine());
            System.out.println("Writing on file complete ");
            fwrite.close();
        }catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

如果您不相信请编译并运行该程序。这不起作用。它不允许我输入字符串并直接进入下一条指令,该指令关闭流并成功输出文件写入。

最佳答案

您应该使用in.nextLine()来获取整行。

fwrite.write(in.nextLine());

两次使用 nextLine() :

import java.io.FileWriter;
import java.io.IOException;
import java.util.Scanner;


public class FichierTexteWrite {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub

        try {
            System.out.println("Entrez le nom d'un fichier :");
            Scanner in = new Scanner(System.in);
            String filename = in.nextLine(); // *** note change
            FileWriter fwrite = new FileWriter(filename);
            System.out.println("Entrez une phrase a memoriser");
            fwrite.write(in.nextLine());
            System.out.println("Writing on file complete ");
            fwrite.close();
        }catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

否则,您的 nextLine() 调用将读取第一行的行尾标记,即您获取文件名的行,而您不希望这样。

关于java - 扫描仪仅读取字符串的第一个标记,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16513647/

相关文章:

java - 存储在字符串中

java - 套接字:BufferedReader readLine() block

java - 在 Spring Boot 中通过 @Value 检索 application.properties 值

Java:使用 hasNextInt 和 do-while 循环,它会忽略偶数次的整数输入

Java Unicode 问题(我认为)

java - 为什么一个 println 语句会改变我的代码的整个输出?

java - 未处理的异常类型filenotfoundException,编译问题

C# 相当于 Java 的 charAt()?

java - 逆变方法参数类型

java - 使用 Tika 解析元标记并从正文中获取 HTML 内容