Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.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 创建打开文件的方法,然后让';s用户写入文件,然后在空行上按enter键时结束?_Java_Loops - Fatal编程技术网

Java 创建打开文件的方法,然后让';s用户写入文件,然后在空行上按enter键时结束?

Java 创建打开文件的方法,然后让';s用户写入文件,然后在空行上按enter键时结束?,java,loops,Java,Loops,我想创建一个方法,打开一个文件进行写入,然后提示用户输入几行文本,直到他们在空行上按enter键停止输入 它给了我一些麻烦,因为我可以运行这个方法,我可以输入文本,但它不会关闭或保存?我在我的文本后点击return以转到一个空行,然后再次点击return,但它只是移动到另一行 我已经写了以下内容,但无法使其正确运行 我的代码: public void writeFile() { String myString; clrscr(); System.out.println(

我想创建一个方法,打开一个文件进行写入,然后提示用户输入几行文本,直到他们在空行上按enter键停止输入

它给了我一些麻烦,因为我可以运行这个方法,我可以输入文本,但它不会关闭或保存?我在我的文本后点击return以转到一个空行,然后再次点击return,但它只是移动到另一行

我已经写了以下内容,但无法使其正确运行

我的代码:

 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()
方法确保从不返回空值(这比在任何地方都进行空值检查要好)