Java文件I/O验证文件内容,然后使用这些内容创建销售报告
我正在学习一门Java初级课程,由于某些原因,我最近的作业似乎非常难。作业的重点是文件I/O。它涉及许多部分,但这一部分确实让我感到困惑。它涉及:Java文件I/O验证文件内容,然后使用这些内容创建销售报告,java,file-io,Java,File Io,我正在学习一门Java初级课程,由于某些原因,我最近的作业似乎非常难。作业的重点是文件I/O。它涉及许多部分,但这一部分确实让我感到困惑。它涉及: 读取销售文件,其中每一行都应该有第一个 分区(N、S、E或W),然后是下一行的季度(1-4), 然后在第三行显示销售金额,然后重复(可以吗 这可以) 我们必须验证每一行都有一个允许的 选项/文件类型(可以这样做确定) 然后将所有错误转储到错误文件中,并要求用户提供 另一个文件&重复,直到输入文件的格式正确。 (让它工作起来) 一旦格式正确,我们就必须
北$total
南方$total
东$total
西元总数 按季度划分的总销售额:
一月至三月$total
4月至6月$total
七月至九月$total
10月至12月总计$ 年终总数:$总数 一个菜单选项必须是验证文件格式是否正确,然后出现另一个菜单选项以生成销售报告 注意:我们还不希望使用数组(这是下一个任务)。
import java.io.*;
import java.util.Scanner;
public class SalesReporting {
public static void main(String[] args) throws Exception {
String inputData;
String divisionRead;
int qtrRead;
double salesRead;
String filePath;
String menuChoice;
File fileName;
PrintWriter outputErrorLog;
PrintWriter outputSalesReport;
Scanner keyboard = new Scanner(System.in);
Scanner inputFile;
String overwriteFile;
Boolean isDataFileError;
Boolean isValidSalesFile = false;
Boolean isValidMenuChoice;
Boolean isToOverwrite = false;
System.out.println("\tHarmway Corporation" +
"\nQuarterly Sales Report Generator");
do {
do {
isValidMenuChoice = true;
// display main menu options to user & prompt for choice
System.out.print("\n\tMain Menu" +
"\n" +
"\n[V]alidate Sales Data");
// only display generate sales report option if a sales report has been validated
if (isValidSalesFile) {
System.out.print("\n[G]enerate Sales Report");
}
System.out.print("\nE[x]it program" +
"\n");
System.out.print("\nEnter choice: ");
menuChoice = keyboard.next();
if (!menuChoice.equalsIgnoreCase("v") &&
!menuChoice.equalsIgnoreCase("g") &&
!menuChoice.equalsIgnoreCase("x")) {
isValidMenuChoice = false;
System.out.print("\n\t**Error** - Invalid menu item");
}
} while (isValidMenuChoice == false);
if (menuChoice.equalsIgnoreCase("v")) {
do {
// prompt user for the sales data file path
System.out.print("\nSales data file path: ");
filePath = keyboard.next();
fileName = new File(filePath);
// if the file path doesn't exist, error displayed
if (!fileName.exists()) {
System.out.println("\n" + fileName + " not found");
}
} while (!fileName.exists());
// create a scanner for the input file
inputFile = new Scanner(fileName);
// create an error log to dump invalid sales data errors to
fileName = new File("errorlog.txt");
outputErrorLog = new PrintWriter(fileName);
// resets boolean to allow for error free data file check
isDataFileError = false;
// validate and store the sales data
while (inputFile.hasNext())
{
// first line must be division N, S, E or W to be valid
inputData = inputFile.next();
try
{
divisionRead = inputData;
if (isValidDivision(divisionRead)) {
System.out.println("ok division");
}
else
{
isDataFileError = true;
outputErrorLog.println(divisionRead + ",Invalid division value");
}
}
catch (Exception e)
{
isDataFileError = true;
outputErrorLog.println(inputData + ",Invalid division value");
}
// if second line is a valid quarter
inputData = inputFile.next();
try
{
qtrRead = Integer.parseInt(inputData);
if (isValidQuarter(qtrRead)) {
System.out.println("ok quarter");
}
else
{
isDataFileError = true;
outputErrorLog.println(qtrRead + ",Invalid quarter value");
}
}
catch (Exception e)
{
isDataFileError = true;
outputErrorLog.println(inputData + ",Invalid quarter value");
}
inputData = inputFile.next();
try
{
salesRead = Double.parseDouble(inputData);
if (isValidSales(salesRead)) {
System.out.println("ok sales");
}
else
{
isDataFileError = true;
outputErrorLog.println(salesRead + ",Invalid sales amount value");
}
}
catch (Exception e)
{
isDataFileError = true;
outputErrorLog.println(inputData + ",Invalid sales amount value");
}
}
// close the input sales data file
inputFile.close();
// close the error log file to write
outputErrorLog.close();
if (isDataFileError)
{
// there was an error in the sales file; not a valid sales data file
isValidSalesFile = false;
System.out.print("\nThe data file contains data errors"
+ " (See error log for details)");
}
else
{
// there were no errors; valid sales data file
isValidSalesFile = true;
System.out.print("\nThe data file is validated");
}
}
if (menuChoice.equalsIgnoreCase("g")) {
System.out.println("\ntemp g");
do {
// prompt user for file path to save sales report
System.out.print("\nSave report as: ");
filePath = keyboard.next();
// identify file to be used
fileName = new File(filePath);
// file already exists; ask whether to overwrite file or not
if (fileName.exists())
{
do
{
System.out.print("\nOverwrite (y/n): ");
overwriteFile = keyboard.next();
if (overwriteFile.equalsIgnoreCase("y"))
{
isToOverwrite = true;
// create printwriter for the sales data file
outputSalesReport = new PrintWriter(filePath);
System.out.println("\nGenerating sales report...");
// add code to write to the results to the file
// close sales report
outputSalesReport.close();
System.out.println("\nReport generated successfully!");
}
} while (!overwriteFile.equalsIgnoreCase("n") &&
!overwriteFile.equalsIgnoreCase("y"));
}
// file doesn't already exist; save the file
else if (!fileName.exists())
{
// create printwriter for the sales data file
outputSalesReport = new PrintWriter(filePath);
System.out.println("\nGenerating sales report...");
// add code to write to the results to the file
// close sales report
outputSalesReport.close();
System.out.println("\nReport generated successfully!");
}
} while (!isToOverwrite);
}
if (menuChoice.equalsIgnoreCase("x")) {
System.out.println("\nProgram has been terminated.");
System.exit(0);
}
} while (!menuChoice.equalsIgnoreCase("x"));
}
public static boolean isValidDivision(String divisionRead) {
if (divisionRead.equalsIgnoreCase("N") ||
divisionRead.equalsIgnoreCase("S") ||
divisionRead.equalsIgnoreCase("E") ||
divisionRead.equalsIgnoreCase("W")) {
return true;
}
else {
return false;
}
}
public static boolean isValidQuarter(int qtrRead) {
if (qtrRead >= 1 && qtrRead <= 4) {
return true;
}
else {
return false;
}
}
public static boolean isValidSales(double salesRead) {
if (salesRead >= 0) {
return true;
}
else {
return false;
}
}
}
import java.io.*;
导入java.util.Scanner;
公共类销售报告{
公共静态void main(字符串[]args)引发异常{
字符串输入数据;
字符串读取;
int-qtrRead;
双重销售阅读;
字符串文件路径;
字符串菜单;
文件名;
PrintWriter输出日志;
PrintWriter outputSalesReport;
扫描仪键盘=新扫描仪(System.in);
扫描仪输入文件;
字符串覆盖文件;
布尔isDataFileError;
布尔值isValidSalesFile=false;
布尔isValidMenuChoice;
布尔值=假;
System.out.println(“\tHarmway公司”+
“\n快速销售报告生成器”);
做{
做{
isValidMenuChoice=true;
//向用户显示主菜单选项并提示选择
System.out.print(“\n\t主菜单”+
“\n”+
“\n[V]验证销售数据”);
//仅当已验证销售报告时才显示生成销售报告选项
如果(isValidSalesFile){
系统输出打印(“\n[G]生成销售报告”);
}
System.out.print(“\nE[x]it程序”+
“\n”);
系统输出打印(“\n输入选项:”);
menuChoice=keyboard.next();
如果(!menuChoice.equalsIgnoreCase(“v”)&&
!menuChoice.equalsIgnoreCase(“g”)&&
!menuChoice.equalsIgnoreCase(“x”)){
isValidMenuChoice=false;
System.out.print(“\n\t**错误**-无效菜单项”);
}
}while(isValidMenuChoice==false);
if(menuChoice.equalsIgnoreCase(“v”)){
做{
//提示用户输入销售数据文件路径
System.out.print(“\n销售数据文件路径:”);
filePath=keyboard.next();
fileName=新文件(filePath);
//如果文件路径不存在,则显示错误
如果(!fileName.exists()){
System.out.println(“\n”+文件名+”未找到“);
}
}而(!fileName.exists());
//为输入文件创建扫描仪
inputFile=新扫描仪(文件名);
//创建错误日志以将无效的销售数据错误转储到
fileName=新文件(“errorlog.txt”);
outputErrorLog=新的PrintWriter(文件名);
//重置布尔值以允许无错误的数据文件检查
isDataFileError=false;
//验证并存储销售数据
while(inputFile.hasNext())
{
//第一行必须是N、S、E或W部分才能有效
inputData=inputFile.next();
尝试
{
分区读取=输入数据;
if(IsValidVision(分区读取)){
System.out.println(“ok部门”);
}
其他的
{
isDataFileError=true;
outputErrorLog.println(divisionRead+“,无效的除法值”);
}
}
捕获(例外e)
{
isDataFileError=true;
println(inputData+“,无效的除法值”);
}
//如果第二行是有效的四分之一
inputData=inputFile.next();
尝试
{
qtrRead=Integer.parseInt(inputData);
如果(isValidQuarter(qtrRead)){
系统输出打印项次(“正常季度”);
}
其他的
{
isDataFileError=true;
outputErrorLog.println(qtrRead+“,无效的季度值”);
}
}
捕获(例外e)
{
isDataFileError=true;
outputErrorLog.println(inputData+“,无效的季度值”);
}
inputData=inputFile.next();
尝试
{
salesRead=Double.parseDouble(inputData);
if(isValidSales(salesRead)){
System.out.prin
String.format("%s:%s",strDivision, doubleAmount);