Java文件输入和从数据到文件输出的操作
嘿,那么aim正在开发一个程序,该程序从一个文本文件中读取运动数据,并将该数据的摘要打印到另一个文本文件中。输入文件由多条记录组成 txt文件中的示例输入如下所示:Java文件输入和从数据到文件输出的操作,java,input,exception-handling,output,inputmismatchexception,Java,Input,Exception Handling,Output,Inputmismatchexception,嘿,那么aim正在开发一个程序,该程序从一个文本文件中读取运动数据,并将该数据的摘要打印到另一个文本文件中。输入文件由多条记录组成 txt文件中的示例输入如下所示: 1) Joe Schmoe 76.5 20 30 25 10 75.9 Jilly Momilly Schmill 50.5 30 30 35 37 28 32 35 34 34 49.2 Gail Quail 62.3 15 17 10 3 10 63.6 Frank Crank 8
1) Joe Schmoe
76.5 20 30 25 10 75.9
Jilly Momilly Schmill
50.5 30 30 35 37 28 32 35 34 34 49.2
Gail Quail
62.3 15 17 10 3 10 63.6
Frank Crank
83.2 5 83.2
John Quann
57.9 30 32 35 32 30 57.2
我的问题是我不能让我的代码读取每个人,我只能让它读取第一个,或者让我进入无限循环或输入不匹配。
这是我的密码:
`//Doubler.java
import java.util.Scanner;
import java.io.File;
import java.io.FileNotFoundException;
import java.util.InputMismatchException;
import java.io.IOException;
import java.io.BufferedWriter;
import java.io.BufferedReader;
import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.io.PrintWriter;
import java.util.Scanner;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileNotFoundException;
import java.io.EOFException;
import java.io.IOException;
public class ExerciseSummary
{
private Scanner inputStream = null;
private PrintWriter outputStream = null;
private int next = 0;
private int sum = 0;
private int count = 0;
private double avg = 0;
private double firstWeight = 0;
private double lastWeight = 0;
private String line;
public static void main(String[] args)
{
ExerciseSummary summary = new ExerciseSummary();
summary.connectToInputFile();
summary.connectToOutputFile();
summary.summaryData();
summary.closeFiles();
System.out.println("\nAll numbers from the input file have been");
System.out.println("summarized and copied to the output file.");
}
public void connectToInputFile()
{
String inputFileName = getFileName("\nEnter name of input file: ");
try
{
inputStream =
new Scanner(new File(inputFileName));
}
catch(FileNotFoundException e)
{
System.out.println("File " + inputFileName + " not found.");
System.exit(0);
}
catch(IOException e)
{
System.out.println("Error opening input file " + inputFileName);
System.exit(0);
}
}
private String getFileName(String prompt)
{
String fileName = null;
System.out.print(prompt);
Scanner keyboard = new Scanner(System.in);
fileName = keyboard.next();
return fileName;
}
public void connectToOutputFile()
{
String outputFileName = getFileName("Enter name of output file: ");
try
{
//outputStream = new PrintWriter(outFile);
outputStream =
new PrintWriter(outputFileName);
}
catch(IOException e)
{
System.out.println("Error opening output file " + outputFileName);
//System.out.println(e.getMessage());
System.exit(0);
}
}
public void summaryData()
{
try
{
while (inputStream.hasNext());
{
line = inputStream.nextLine();
firstWeight = inputStream.nextDouble();
while (inputStream.hasNextInt())
{
sum += inputStream.nextInt();
count ++;
avg = (sum/count);
}
lastWeight = inputStream.nextDouble();
outputStream.println(line + " " + firstWeight + " " + sum + " " + count + " " + lastWeight + " " + avg + " " + (lastWeight-firstWeight));
}
}
catch (InputMismatchException e)
{
System.out.print(e);
System.exit(0);
}
}
public void closeFiles()
{
inputStream.close();
outputStream.close();
}
}
输出记录是输入记录的摘要。它由四个选项卡分隔的值组成:该参与者的数据天数、锻炼的总分钟数、每天锻炼的平均分钟数,以及如果参与者体重增加将为负数的总体重减轻量。该名称已被读入,但未再次打印出来。我们正在对数据进行匿名处理。根据上述记录,受试者的名字是乔·施莫,他的起始体重是76.5公斤。Joe锻炼了四天,在开始体重和最终体重之间有四个int值,总共85分钟20+30+25+10=85。他的最终体重是75.9公斤。输出记录为:
4 85 21.25 0.59999999943
我绞尽脑汁已经两个星期了,如果有任何帮助,我将不胜感激。谢谢你无限循环:
while (inputStream.hasNext());
{
line = inputStream.nextLine();
firstWeight = inputStream.nextDouble();
while (inputStream.hasNextInt())
{
sum += inputStream.nextInt();
count ++;
avg = (sum/count);
}
lastWeight = inputStream.nextDouble();
outputStream.println(line + " " + firstWeight + " " + sum + " " + count + " " + lastWeight + " " + avg + " " + (lastWeight-firstWeight));
}
);while inputStream.hasNext是一个空表达式,因此java只需执行;而inputStream.hasNext和不使用该文件
下一个问题是InputMissmatchException:
扫描仪需要这行代码:
inputStream =
new Scanner(new File("C:\\Test\\readTest.txt"));
inputStream.useLocale(Locale.ENGLISH);//this will help to interpret "." as decimal character
最后一个问题是,在while结束时需要这两行代码来使用换行符:
lastWeight = inputStream.nextDouble();
outputStream.println(line + " " + firstWeight + " " + sum + " " + count + " " + lastWeight + " " + avg + " " + (lastWeight-firstWeight));
if(inputStream.hasNext())
inputStream.next(); // or even inputStream.nextLine();
现在我为第一人称:
Joe Schmoe 76.5 85 4 75.9 21.0-0.599999943
结果是否正确?无限循环或输入不匹配发生在哪里?在它询问输出文件的名称后,它进入无限循环。请将您的预期输出发布给第一人称。不匹配也发生在那里。当我使用hasNext或hasNext时,似乎有所不同;或拥有nextLine;这是期望的输出:4 85 21.25 0.599999999943谢谢,我甚至没有注意到现在它给了我java.util。InputMismatchException@user3389626如果输出正确,我认为这应该有效。对不起,我如何使用inputStream.useLocaleScale.ENGLISH;我需要进口什么东西吗?找不到符号:变量Localeimport java.util.Locale;工作正常吗?输出结果如何?这不是你想要的1:1输出,对吗?