Java 从用户输入多行打印到文件?
我试着写一个程序,要求用户以他们想要保存的打油诗的名字pu,然后它用这个打油诗的名字创建一个文件,然后要求他们写打油诗,然后保存到文件中。我有这个代码来创建文件,但当我试图将打油诗写入文件时,它似乎陷入了一个循环中,并继续与输入文件的第一行保持一致。非常感谢您的帮助Java 从用户输入多行打印到文件?,java,file,filewriter,Java,File,Filewriter,我试着写一个程序,要求用户以他们想要保存的打油诗的名字pu,然后它用这个打油诗的名字创建一个文件,然后要求他们写打油诗,然后保存到文件中。我有这个代码来创建文件,但当我试图将打油诗写入文件时,它似乎陷入了一个循环中,并继续与输入文件的第一行保持一致。非常感谢您的帮助 public void start () { System.out.println("<<THIS PROGRAM SAVES A LIMERICK THAT YOU HAVE WROTE>>");
public void start () {
System.out.println("<<THIS PROGRAM SAVES A LIMERICK THAT YOU HAVE WROTE>>");
}
public File create () {
System.out.println("<<ENTER THE NAME OF THE LIMERICK>>");
name = scan.nextLine();
nameFile = name + ".txt";
File file = new File(nameFile);
try {
if (file.createNewFile() ) {
System.out.println("<<FILE CREATED>>");
} else {
System.out.println("<<FILE ALREADY EXISTS>>");
}
} catch (IOException e) {
e.printStackTrace();
}
return file;
}
public void write () {
Limerick write = new Limerick();
File file = write.create();
System.out.println("<<ENTER THE LIMIRICK>>");
PrintWriter pw;
try {
pw = new PrintWriter (new BufferedWriter (new FileWriter(file)));
limerick = scan.nextLine();
while (!(limerick.equals("DONE"))) {
pw.println(limerick);
}
pw.close();
System.out.println("<<LIMERICK WRITTEN TO FILE>>");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void main (String args[]) {
Limerick method = new Limerick();
method.start();
method.write();
}
公共作废开始(){
System.out.println(“”);
}
公共文件创建(){
System.out.println(“”);
name=scan.nextLine();
nameFile=name+“.txt”;
文件文件=新文件(名称文件);
试一试{
if(file.createNewFile()){
System.out.println(“”);
}否则{
System.out.println(“”);
}
}捕获(IOE异常){
e、 printStackTrace();
}
返回文件;
}
公共空写(){
Limerick write=新的Limerick();
File=write.create();
System.out.println(“”);
印刷作家;
试一试{
pw=新的PrintWriter(新的BufferedWriter(新的FileWriter(文件)));
limerick=scan.nextLine();
而(!(limerick.equals(“DONE”)){
普华永道(利默里克);
}
关闭();
System.out.println(“”);
}捕获(IOE异常){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
}
公共静态void main(字符串args[]){
利默里克方法=新利默里克();
方法。start();
方法write();
}
在下面的循环中,limerick的值永远不会更新,因此它进入一个无限循环
while (!(limerick.equals("DONE"))) {
pw.println(limerick);
}
将其更改为以下内容:
while (!(limerick.equals("DONE"))) {
pw.println(limerick);
limerick = scan.nextLine();
}
因此,在每次迭代之后,
limerick
的值都会更新。在下面的循环中,limerick的值永远不会更新,因此它进入一个无限循环
while (!(limerick.equals("DONE"))) {
pw.println(limerick);
}
将其更改为以下内容:
while (!(limerick.equals("DONE"))) {
pw.println(limerick);
limerick = scan.nextLine();
}
因此,每次迭代后,
limerick
的值都会更新。您需要在循环内运行scan.nextLine()
:
while (!((limerick = scan.nextLine()).equals("DONE"))) {
pw.println(limerick);
}
您需要在循环内运行
scan.nextLine()
:
while (!((limerick = scan.nextLine()).equals("DONE"))) {
pw.println(limerick);
}
limerick
的值应该在的while(!(limerick.equals(“DONE”)
循环中更改,否则它将是一个无限循环(例如在循环中放置limerick=scan.nextLine();
)。非常感谢limerick
的值应该在的while(!(limerick.equals(“DONE”)
循环中更改,或者它将是一个无限循环(例如将limerick=scan.nextLine();
放入循环中)。非常感谢