我有一个程序,要求数据文件包含显示所有员工,个别员工,插入员工和删除员工的部分。
下面是完整的代码,但我不知道如何删除部分
import java.io.*;
import java.util.*;
import java.util.Scanner;
import javax.swing.*;
import java.io.IOException;
import java.io.FileNotFoundException;
import java.io.FileReader;
public class Program6pt2
{
static Scanner scan = new Scanner (System.in);
static String str, FName, LName, SS, SS1, Name;
static double pay, hours;
static double rate, gross, overtime, net, NO, fed, state, deduction;
static double union=7.85, hospital=25.65;
static char ch, ch1;
static int num, i;
//static Scanner scan= new Scanner(System.in);
public static void main(String[] args)throws FileNotFoundException, IOException
{
Scanner infile= new Scanner(new FileReader("G:\\Program5.txt"));
{
System.out.println("########################################################");
System.out.println("# The purpose of the following algorithms #");
System.out.println("# are to find the area, surface area, volume,` #");
System.out.println("# and compound interest of the following programs #");
System.out.println("########################################################");
do {
System.out.println("######################################################");
System.out.println("# #");
System.out.println("# MENU #");
System.out.println("# 1. Individual Employees #");
System.out.println("# 2. All Employees #");
System.out.println("# 2. Insert #");
System.out.println("# 2. Quit #");
System.out.println("######################################################");
System.out.println();
System.out.println(" Please enter 1 or 2 to quit ");
num = scan.nextInt();
switch (num)
{
case 1:individual(SS, LName, FName, pay, hours);
break;
case 2: all(SS, LName, FName, pay, hours);
break;
case 3: insert(SS, LName, FName, pay, hours);
break;
case 4: delete(SS, LName, FName, pay, hours);
break;
default: System.out.println("Thank you so much for using this Program!");
}
}while(num != 5);
}
}
public static void individual(String a, String b, String c, double d, double e)throws FileNotFoundException, IOException
{
Scanner infile= new Scanner(new FileReader("G:\\Program5.txt"));
int i=0;
System.out.println("---****************************************************************---");
System.out.println("--- THIS MENU ALLOWS THE USER TO SELECT A SS NUMBER OR AN ****---");
System.out.println("--- INDIVIDUAL'S NAME AND DISPLAY ALL THEIR INFO AS WELL ****---");
System.out.println("--- DISPLAY ALL THE NAMES IN THE LIST AS WELL AS THEIR SS # IN ***----");
System.out.println("--- A LIST ****---");
System.out.println("---****************************************************************---");
do
{
System.out.println("################### #########################");
System.out.println("# MAIN MENU #");
System.out.println("# 1. Enter The Social Security Number #");
System.out.println("# 2. Quit #");
System.out.println("# 3. Main Menu #");
System.out.println("# #");
System.out.println("#############################################");
System.out.println();
System.out.println(" Please enter 1,2,3 or 4 ");
num = scan.nextInt();
System.out.println();
switch (num)
{
case 1:SSnumber(a,b,c,d,e);
break;
case 3: System.out.println("Please enter a number");
break;
default: System.out.println("Please select A, B, C, or D to Quit");
break;
}
}while(num != 3);
}
public static void SSnumber(String A, String B, String C, double D, double E)throws FileNotFoundException, IOException
{
Scanner infile = new Scanner(new FileReader("G:\\Program5.txt"));
int i=0;
System.out.print("Enter the employee number (ex. 111-11-1111) : ");
SS1= scan.next();
System.out.println();
System.out.println("-----------------------------------------------------------------------------------------------------------");
System.out.printf("%-4s%10s%13s%8s%10s%14s%12s%13s%10s%n", "NO.", "Last Name", "First Name", "Hours", "Payrate", "Overtime Pay", "Gross Pay", "Deductions", "Net Pay");
System.out.println("-----------------------------------------------------------------------------------------------------------");
while (infile.hasNext())
{
A= infile.next();
B= infile.next();
C= infile.next();
D= infile.nextDouble();
E= infile.nextDouble();
++i;
if(A.compareTo(SS1) ==0)
{
if(E>40)
{
overtime= 1.5*D*(E-40);
gross= overtime+ (D*40);
}
else
{
overtime=0;
gross= E*D;
}
fed=gross*0.18;
state=gross*0.045;
deduction=fed+state+hospital+union;
net=gross-deduction;
//System.out.println(+i+ B+ C+ E+ D+ overtime+ gross+ deduction+ net);
System.out.printf("%-5d%-12s%-12s%6.1f%9.2f%10.2f%15.2f%13.2f%10.2f%n", i, B, C, E, D, overtime, gross, deduction, net);
}
}
infile.close();
System.out.println();
System.out.println();
}
public static void all(String a, String b, String c, double d, double e)throws FileNotFoundException, IOException
{
Scanner infile = new Scanner(new FileReader("G:\\Program5.txt"));
int i=0;
System.out.println("-----------------------------------------------------------------------------------------------------------");
System.out.printf("%-4s%10s%13s%8s%10s%14s%12s%13s%10s%n", "NO.", "Last Name", "First Name", "Hours", "Payrate", "Overtime Pay", "Gross Pay", "Deductions", "Net Pay");
System.out.println("-----------------------------------------------------------------------------------------------------------");
while (infile.hasNext())
{
a= infile.next();
b= infile.next();
c= infile.next();
d= infile.nextDouble();
e= infile.nextDouble();
++i;
if(e>40)
{
overtime=1.5*d*(e-40);
gross= overtime+(d*40);
}
else
{
overtime=0;
gross=e*d;
}
fed=gross*0.18;
state=gross*0.045;
deduction=fed+state+union+hospital;
net=gross-deduction;
System.out.printf("%-5d%-12s%-12s%6.1f%9.2f%10.2f%15.2f%13.2f%10.2f%n", i, b, c, e, d, overtime, gross, deduction, net );
}
infile.close();
System.out.println();
System.out.println();
}
public static void insert(String a, String b, String c, double d, double e)throws FileNotFoundException
{
Scanner infile = new Scanner(new FileReader("G:\\Program5.txt"));
try
{
while (infile.hasNext())
{
a= infile.next();
b= infile.next();
c= infile.next();
d= infile.nextDouble();
e= infile.nextDouble();
}
System.out.print("Enter the ID number (ex.111-22-3333) : ");
a=scan.next();
System.out.print("Enter the Last Name (ex. Smith) : ");
b=scan.next();
System.out.print("Enter the First Name (ex. John) : ");
c=scan.next();
System.out.print("Enter the pay rate (ex 7.00) : ");
d=scan.nextDouble();
System.out.print("Enter the hours worked (ex 57.0) : ");
e=scan.nextDouble();
FileWriter insert1 = new FileWriter("G:\\Program5.txt", true);
insert1.append("\n");
insert1.append(a + " ");
insert1.append(b + " ");
insert1.append(c + " ");
insert1.append(d + " ");
insert1.append(e + "\n");
insert1.close();
}
catch(Exception o)
{
System.out.println("Wrong");
}
System.out.println();
}
public static void delete(String a, String b, String c, double d, double e)throws FileNotFoundException
{
Scanner infile = new Scanner(new FileReader("G:\\Program5.txt"));
try
{
boolean append=false;
Scanner inFile = new Scanner(new FileReader("G:\\Program5.txt"));
FileWriter outfile= new FileWriter("G:\\Program5.txt", append);
BufferedWriter print = new BufferedWriter(outfile);
System.out.println("choose a employee to delete from the system.");
System.out.print("Enter the employee Social Security Number: ");
SS= scan.next();
{
print.write("\n");
print.write( a + " " );
print.write( "\n");
}
print.close();
}
catch (IOException ioe)
{
ioe.printStackTrace();
System.out.println("Wrong");
}
System.out.println();
}
}
答案 0 :(得分:2)
请参阅此处提供的答案:Java - delete line from text file by overwriting while reading it。
最好的办法是将文件的修改版本(删除要删除的部分)写入临时文件,删除(或备份)原始文件,然后重命名为原始文件名。
答案 1 :(得分:0)
您可以使用以下代码将所需行替换为“”或null;
public static boolean readReplace(String fileName, String oldPattern,
String replPattern, int lineNumber) {
String line;
StringBuffer sb = new StringBuffer();
int nbLinesRead = 0;
try {
FileInputStream fis = new FileInputStream(fileName);
BufferedReader reader = new BufferedReader(new InputStreamReader(
fis));
while ((line = reader.readLine()) != null) {
nbLinesRead++;
line = line.toLowerCase();
if (nbLinesRead == lineNumber) {
line = line.replaceFirst(oldPattern.toLowerCase(),
replPattern);
}
sb.append(line + "\n");
}
reader.close();
BufferedWriter out = new BufferedWriter(new FileWriter(fileName));
out.write(sb.toString());
out.close();
} catch (Exception e) {
return false;
}
return true;
}
答案 2 :(得分:0)
简短的回答:你不能。
答案很长:创建一个新文件并将除了不存在的行之外的所有行复制到该文件中。之后,重命名旧文件,然后重命名新文件,并删除旧文件。