Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/388.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 扫描仪仅读取字符串的第一个标记_Java_Java.util.scanner_Java Io_Filereader_Filewriter - Fatal编程技术网

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

Java 扫描仪仅读取字符串的第一个标记,java,java.util.scanner,java-io,filereader,filewriter,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) {

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();
        }
    }
}

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

您应该使用.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()调用将读取第一行的行尾标记,即您获取文件名的行尾标记,您不需要它。

hmmm有趣!为什么会发生这种情况?@hayonj:您对.next()中的
的第一次调用读入了一个标记,但没有读入该行的行尾标记。下次调用.nextLine()中的
时,您读入了第一行(带有文件名的行)的行尾标记,而不是下一行。再次工作!该死的,你很好!今天第二次你救了我:)发现这个链接也解释了这个问题。。。分享,以防其他人落入这个非常愚蠢的陷阱。这里真正发生的是,你只在读一个标记
FileWriter
写你让它写的任何东西。