使用BufferedWriter从用户获取输入并将其写入文件

时间:2017-11-13 14:14:39

标签: java user-input bufferedwriter

我刚开始使用Java,很抱歉,如果我问一些非常简单的问题。我基本上必须让用户连续整数,一旦他们输入负数,循环将退出。到目前为止我编写的代码似乎无法将我从用户那里得到的输入写入我创建的文件,morescores。当我尝试打开文件或从主方法调用它时,它是空白的。我已尝试在google,youtube和stackoverflow上搜索它,但似乎没有任何工作。我会感激我能得到的任何帮助:)

package bufferedreader;
import java.io.*;
import java.util.Scanner;


public class BufferedReader {

/**
 * @param args the command line arguments
 * @throws java.io.IOException
 */
public static void main(String[] args) throws IOException {
   writeToFile("morescores");
   processFile("morescores");      
}


public static void writeToFile (String filename) throws IOException {
    BufferedWriter outputWriter = new BufferedWriter (new FileWriter ("morescores.txt"));
    int score = 1;            
   while (true) {
   Scanner reader = new Scanner(System.in);
        System.out.print ("Enter a number: ");
       score = reader.nextInt();
        if (score < 0) { 
            break;
       } else {
          outputWriter.write(score);
          outputWriter.newLine();           
    }      
    }
   outputWriter.flush();
   outputWriter.close();
}

public static void processFile2 (String filename) throws IOException {
    java.io.BufferedReader inputReader = new java.io.BufferedReader(new InputStreamReader (new FileInputStream ("morescores.txt")));
    String line;
    while ((line = inputReader.readLine()) != null) {
        System.out.println (line);
    }
    inputReader.close();
}

}

更新:我修复了问题哈哈原来我试图打印一个只能是字符串的整数。我实际上有一个后续问题,我还需要找到用户输入的所有数字的平均值。我该怎么办?如何编写代码以便程序知道用户输入值的次数我实际上有一个后续问题,我还需要找到用户输入的所有数字的平均值。我该怎么办?如何编写代码以便程序知道用户输入值的次数

2 个答案:

答案 0 :(得分:1)

在写入文件之前将int转换为字符串,以便

outputWriter.write(score);

将是:

outputWriter.write(String.valueOf(score));

如果您想知道为什么必须先将其转换为doc: https://docs.oracle.com/javase/7/docs/api/java/io/Writer.html#write(int)

您会看到它不会写int,而是会写int所代表的字符

答案 1 :(得分:0)

如果您将 int 值传递给 BufferedWriter 类的编写方法,则会将其视为字符而不是数字,因此使用您编写的当前代码,您提供的任何正数将转换为有效的char值,然后将其写入文件。 为了实现您的要求,您需要在将int值写入文件之前将其转换为字符串,并且可以使用以下任何方法:

String.valueOf(score)  
Integer.toString(score)