Java 创建打开文件的方法,然后让';s用户写入文件,然后在空行上按enter键时结束?
我想创建一个方法,打开一个文件进行写入,然后提示用户输入几行文本,直到他们在空行上按enter键停止输入 它给了我一些麻烦,因为我可以运行这个方法,我可以输入文本,但它不会关闭或保存?我在我的文本后点击return以转到一个空行,然后再次点击return,但它只是移动到另一行 我已经写了以下内容,但无法使其正确运行 我的代码:Java 创建打开文件的方法,然后让';s用户写入文件,然后在空行上按enter键时结束?,java,loops,Java,Loops,我想创建一个方法,打开一个文件进行写入,然后提示用户输入几行文本,直到他们在空行上按enter键停止输入 它给了我一些麻烦,因为我可以运行这个方法,我可以输入文本,但它不会关闭或保存?我在我的文本后点击return以转到一个空行,然后再次点击return,但它只是移动到另一行 我已经写了以下内容,但无法使其正确运行 我的代码: public void writeFile() { String myString; clrscr(); System.out.println(
public void writeFile()
{
String myString;
clrscr();
System.out.println("Begin typing: ");
myString = Genio.getString();
FileOutputStream outputStream = null;
PrintWriter printWriter = null;
// use a try-catch-finally block to catch file-related exceptions
try
{
outputStream = new FileOutputStream("writing.txt");
printWriter = new PrintWriter(outputStream);
printWriter.write(myString);
printWriter.newLine();
// write information to the file via the PrintWriter
while (myString != "")
{
printWriter.print(myString + " ");
}
}
catch (IOException e)
{
System.out.println("Sorry, there has been a problem opening or writing to the file");
}
finally
{
if (printWriter != null)
{
printWriter.close();
}
}
}
如果需要,Genio是处理用户输入的类:
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class Genio
{
public Genio()
{
}
private static String getStr()
{
String inputLine = "";
BufferedReader reader =
new BufferedReader(new InputStreamReader(System.in));
try
{
inputLine = reader.readLine();
}
catch(Exception exc)
{
System.out.println ("There was an error during reading: "
+ exc.getMessage());
}
return inputLine;
}
public static int getInteger()
{
int temp=0;
boolean OK = false;
BufferedReader keyboard = new BufferedReader(new InputStreamReader(System.in));
do
{
try
{
temp = Integer.parseInt(keyboard.readLine());
OK = true;
}
catch (Exception eRef)
{
if (eRef instanceof NumberFormatException)
{
System.out.print("Integer value needed: ");
}
else
{
System.out.println("Please report this error: "+eRef.toString());
}
}
} while(OK == false);
return(temp);
}
public static float getFloat()
{
float temp=0;
boolean OK = false;
BufferedReader keyboard = new BufferedReader(new InputStreamReader(System.in));
do
{
try
{
temp = Float.parseFloat(keyboard.readLine());
OK = true;
}
catch (Exception eRef)
{
if (eRef instanceof NumberFormatException)
{
System.out.print("Number needed: ");
}
else
{
System.out.println("Please report this error: "+eRef.toString());
}
}
} while(OK == false);
return(temp);
}
public static double getDouble()
{
double temp=0;
boolean OK = false;
BufferedReader keyboard = new BufferedReader(new InputStreamReader(System.in));
do
{
try
{
temp = Double.parseDouble(keyboard.readLine());
OK = true;
}
catch (Exception eRef)
{
if (eRef instanceof NumberFormatException)
{
System.out.print("Number needed: ");
}
else
{
System.out.println("Please report this error: "+eRef.toString());
}
}
} while(OK == false);
return(temp);
}
public static char getCharacter()
{
String tempStr="";
char temp=' ';
boolean OK = false;
do
{
try
{
tempStr = getStr();
temp = tempStr.charAt(0);
OK = true;
}
catch (Exception eRef)
{
if (eRef instanceof StringIndexOutOfBoundsException)
{
// means nothing was entered so prompt ...
System.out.print("Enter a character: ");
}
else
{
System.out.println("Please report this error: "+eRef.toString());
}
}
} while(OK == false);
return(temp);
}
public static String getString()
{
String temp="";
try
{
temp = getStr();
}
catch (Exception eRef)
{
System.out.println("Please report this error: "+eRef.toString());
}
return(temp);
}
}
在
while
循环开始之前,您只读取myString
一次。您不会将字符串与==或进行比较=
改变
while(myString!=“”)
到while(!myString.equals(“”)
您的类在大多数情况下工作正常。我为您修复了有问题的部分:
// write information to the file via the PrintWriter
while (!myString.equals(""))
{
myString = Genio.getString();
printWriter.print(myString + "\n");
}
首先,while内的条件不正确。MyString必须使用equals运算符(或使用isEmpty方法)进行比较
其次,您需要在循环中不断读取myString,否则您将得到一个无限循环,它将永远不会退出
第三,您希望向输出文件添加换行符,因此我添加了它们。您有一个无限循环,因为您在进入while循环之前只读取
myString
,因此您的条件永远不会为false。
此外,正如Rishi Dua所说,您不能将字符串与通常的
==
ou进行比较=
运算符,必须使用.equals()
或.isEmpty
比较=
和equals
方法
由于java.lang.String
class override equals方法,如果两个String对象包含相同的内容,它将返回true
。但是,
=
仅当两个引用指向同一对象时才会返回true
修改代码:
while (! myString.equals("")){
// Write your code here
myString = Genio.getString();
printWriter.print(myString + "\n");
}
@guido可能重复:这只是问题的一部分…@guido这不是我真正的问题?
String
has.isEmpty()
谢谢。你给我的工作原理是它创建并保存文件。但是,没有发生任何事情让我知道它确实起了作用(我检查了文件夹并在那里找到了文件)。我是否应该在循环后添加一个println语句并询问用户是否希望退出?我以为“section”会帮我解决这个问题?我会将while语句中的条件更改为while(!myString.equals(“quit”)
。这样,当用户实际键入“退出”一词时,程序将退出。您可以在异常捕获之前写入“成功写入文件”的内容。如果使用equals:if(myString!=null&&!myString.equals(“”)来避免空指针异常,则还应始终首先检查空值,而不是Genio.getStr()
方法确保从不返回空值(这比在任何地方都进行空值检查要好)