简体   繁体   English

如何从数据文件或文本文件中删除一行?

[英]How to delete a line from a data file or text file?

I have a program that calls for the data file to have sections that displays all employees, individual employees, insert an employee, and delete an employee. 我有一个程序要求数据文件具有显示所有雇员,单个雇员,插入雇员和删除雇员的部分。

Below is the full code but I have no clue how to do the delete portion 以下是完整的代码,但我不知道如何删除部分

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();
   }
}

See Answer provided here: Java - delete line from text file by overwriting while reading it . 请参阅此处提供的答案: Java-在读取文本文件时通过覆盖从文本文件中删除行

Your best bet is to write the modified version of the file (with the part that you want to delete removed) to a temporary file, delete (or backup) original file, and then rename to the original file name. 最好的选择是将文件的修改后的版本(要删除的部分删除)写入临时文件,删除(或备份)原始文件,然后重命名为原始文件名。

You can use the code below to replace the wanted line with "" or null; 您可以使用下面的代码将所需的行替换为“”或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;
}

Short answer: You can't. 简短的回答:不能。

Long answer: Create a new file and copy all lines except the one you don't one to that file. 长答案:创建一个新文件,然后将除您以外的所有行复制到该文件。 After that, rename the old file, then the new file and maybe remove the old one. 之后,重命名旧文件,然后重命名新文件,并删除旧文件。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM