Java 扫描仪仅读取字符串的第一个标记
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) {
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
写你让它写的任何东西。