1

我要做的是删除我所做的预订 txt 文件中的预订看起来像这样

08:00
Niel Butaye
1

我必须删除预订的代码是:

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.File;
import java.io.FileWriter;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.PrintWriter;

public class ReservatieVerwijderen {
    static String naamklant="";
    public ReservatieVerwijderen() {}

  public void removeLineFromFile(String file, String lineToRemove) {

    try {

      File inFile = new File(file);

      if (!inFile.isFile()) {
        System.out.println("Parameter is not an existing file");
        return;
      }

      //Maak een nieuw bestand dat later het originele bestand wordt
      File tempFile = new File(inFile.getAbsolutePath() + ".tmp");

      BufferedReader br = new BufferedReader(new FileReader(file));
      PrintWriter pw = new PrintWriter(new FileWriter(tempFile));

      String line = null;

      //Lees het originele bestand en schrijf naar het tijdelijke bestand 
      //Als de lijn == de lijn die we zoeken schrijven we dit niet over
      while ((line = br.readLine()) != null) {

        if (!line.trim().equals(lineToRemove)) {

          pw.println(line);
          pw.flush();
        }
      }
      pw.close();
      br.close();

      //Verwijder het originele bestand
      if (!inFile.delete()) {
        System.out.println("Could not delete file");
        return;
      } 

      //Hernoem het tijdelijke bestand naar het originele
      if (!tempFile.renameTo(inFile))
        System.out.println("Could not rename file");

    }
    catch (FileNotFoundException ex) {
      ex.printStackTrace();
    }
    catch (IOException ex) {
      ex.printStackTrace();
    }
  }

  public static void main(String[] args) {
    ReservatieVerwijderen util = new ReservatieVerwijderen();
    SimpleInOutDialog  input = new SimpleInOutDialog("Reserveringen");
    naamklant = input.readString("Geef de volledige naam in");
    util.removeLineFromFile("L:\\Documents/Informatica/6de jaar/GIP/Reserveringen.txt", naamklant);
  }
}

它只删除了预订者的名称,我还需要删除小时(08:00)和预订类型(1)。有什么帮助吗?

public class SimpleInOutDialog {

    private String titel;

    /**
     * Constructor van een SimpleInOutDialog.
     *
     * @param titel een String met de titel van het venstertje.
     */
    public SimpleInOutDialog(String titel) {
        this.titel = titel;
    }
    /**
     * Tonen van een tekst in een dialoogvenstertje. 
     * @param message een String met een te tonen berichtje.
     * @param output een String met de te tonen tekst.
     */
    /**
    *  
    * @param 
    */


    public void showString(String message, String output) {
        JOptionPane.showMessageDialog(
            null,
            message + "\n\n" + output + "\n\n",
            titel,
            JOptionPane.PLAIN_MESSAGE);

    }

    /**
    * Tonen van een geheel getal in een dialoogvenstertje.  
    * @param message een String met een te tonen berichtje.
    * @param een int met het te tonen getal.
    */
    public void showInteger(String message, int getal) {
        JOptionPane.showMessageDialog(
            null,
            message + "\n\n" + Integer.toString(getal) + "\n\n",
            titel,
            JOptionPane.PLAIN_MESSAGE);

    }

    /**
    * Tonen van een geheel getal in een dialoogvenstertje.
    * @param message een String met een te tonen berichtje.  
    * @param een double met het te tonen getal.
    */
    public void showDouble(String message, double getal) {
        JOptionPane.showMessageDialog(
            null,
            message + "\n\n" + Double.toString(getal) + "\n\n",
            titel,
            JOptionPane.PLAIN_MESSAGE);
    }

    /**
     * Inlezen van een String.
     * @param message een String met de tekst die in het dialoogvenster
     * moet getoond worden.
     * @return de ingelezen String.  Indien het venster zonder
     * invoer wordt afgesloten is de String null.
     */
    public String readString(String message) {
        Object[] possibilities = null;
        String s = null;
        s =
            (String) JOptionPane.showInputDialog(
                null,
                message,
                this.titel,
                JOptionPane.PLAIN_MESSAGE,
                null,
                possibilities,
                "");

        if ((s == null) || (s.length() == 0)) {
            s = null;
        }
        return s;
    }

    /**
     * Inlezen van een geheel getal.
     * @param message een String met de tekst die in het dialoogvenster
     * moet getoond worden.
     * @return het ingelezen geheel getal (een int).  Indien het venster zonder
     * correcte invoer wordt afgesloten is het getal 0 (nul).
     */
    public int readInteger(String message) {
        boolean isAnInteger = false;
        String tekst = null;
        int gelezen = 0;
        while (!isAnInteger) {
            tekst = readString(message);
            if (tekst != null) {
                try {
                    gelezen = Integer.parseInt(tekst);
                    isAnInteger = true;
                } catch (NumberFormatException nfe) {
                    isAnInteger = false;
                }
            } else {
                isAnInteger = true;
                gelezen = 0;
            }
        }
        return gelezen;
    }

    /**
     * Inlezen van een kommagetal.
     * @param message een String met de tekst die in het dialoogvenster
     * moet getoond worden.
     * @return het ingelezen getal (een double).  Indien het venster zonder
     * correcte invoer wordt afgesloten is het getal 0.0 (nul).
     */
    public double readDouble(String message) {
        boolean isADouble = false;
        String tekst = null;
        double gelezen = 0.0;
        while (!isADouble) {
            tekst = readString(message);
            if (tekst != null) {
                try {
                    gelezen = Double.parseDouble(tekst);
                    isADouble = true;
                } catch (NumberFormatException nfe) {
                    isADouble = false;
                }
            } else {
                isADouble = true;
                gelezen = 0.0;
            }
        }
        return gelezen;
    }

    /**
     * Wanneer je in je programma geen uitvoer meer nodig hebt 
     * MOET je deze bewerking op het SimpleInOutDialog-object uitvoeren.
     * Het programma wordt dan beëindigd.
     */
    public void stop() {
        System.exit(0);
    }

}
4

4 回答 4

1

尽管像您一样将预订实体存储在文本文件中并不是一种很好且安全的方法,但我已经调试了您与操作文本文件相关的代码。在您的removeLineFromFile()方法中,将您的 while 循环更改为下面的代码,它将完成。

boolean go = true;
while ( go )
{
    String temp = "";
    for ( int i = 0; i < 3; i++ )
    {
        line = br.readLine();
        if ( line != null )
            temp += line + "\n";
        else
            go = false;
    }

    if ( !temp.trim().contains( lineToRemove ) )
    {
        pw.print( temp );
        pw.flush();
    }
}
于 2012-03-11T10:46:46.843 回答
1

如果你考虑完整的保留而不是单独的行,你会得到更清晰的代码:

void deleteReservations(String reservationName, BufferedReader input,
      PrintWriter output) throws IOException {
    String date;
    while ((date = input.readLine()) != null) {
      String name = input.readLine();
      String tickets = input.readLine();

      // You can check any part of a reservation here
      // to figure out wether to keep or delete it.
      if (!name.equals(reservationName)) {
        output.println(date);
        output.println(name);
        output.println(tickets);
      }
    }
  }

对于不遵循 3 行块格式的文件,这显然会失败,但话又说回来,文件还是被破坏了。

基于 Sergey Brenner 的回答的示例输入:

08:00
Niel Butaye
1
09:00
dean koontz
2
10:00
stephen king
3

给定名称dean koontz输出:

08:00
Niel Butaye
1
10:00
stephen king
3
于 2012-03-11T11:51:20.877 回答
0

我建议在您的预订开始和结束时放置一个像 $$ 这样的标记,以便在为它创建文件时删除或排序标签。如果文件中保留的位置始终相同,您可以遍历文件并检查需要删除的行。

您已从此处获取代码http://www.javadb.com/remove-a-line-from-a-text-file需要一个字符串作为要删除的参数。因此,您必须事先知道必须删除哪条确切的行。

编辑:

输入文件

08:00
Niel Butaye
1
09:00
dean koontz
1
10:00
stephen king
1

    public static int  findLineToDelete(String file, String lineToRemove) {
     int lineFound=0;
    try {

      File inFile = new File(file);

      if (!inFile.isFile()) {
        System.out.println("Parameter is not an existing file");
        return -1;
      }

      BufferedReader br = new BufferedReader(new FileReader(file));
      String line = null;

      //Lees het originele bestand en schrijf naar het tijdelijke bestand 
      //Als de lijn == de lijn die we zoeken schrijven we dit niet over
      int i=0;
      while ((line = br.readLine()) != null) {
         i++;
        if (line.trim().equals(lineToRemove)) {  
            System.out.println(i);
          lineFound=i;          
        }
      }

      br.close();

    }
    catch (FileNotFoundException ex) {
      ex.printStackTrace();
    }
    catch (IOException ex) {
      ex.printStackTrace();
    }

  return lineFound;
  }

public static void removeNthLine(String f, int toRemove) throws IOException {

    File tmp = File.createTempFile("tmp", "");

    BufferedReader br = new BufferedReader(new FileReader(f));
    BufferedWriter bw = new BufferedWriter(new FileWriter(tmp));
    int i=0;
    String l=null;
        System.out.println("toRemmove"+toRemove);
    while (null != (l = br.readLine())){
        i++;
        if(i!=toRemove-1&&i!=toRemove&&i!=toRemove+1){
          System.out.println(l);
          bw.write(String.format("%s%n", l)); 
         }
    }

    br.close();
    bw.close();

    File oldFile = new File(f);
    if (oldFile.delete())
        tmp.renameTo(oldFile);

   }
  public static void main(String[] args) {


    int found = findLineToDelete("a.txt", "dean koontz");
    System.out.println(found);
    try{
    removeNthLine("a.txt",found);
    }catch(Exception e){e.printStackTrace();}

  }

希望它有所帮助。

于 2012-03-11T09:58:36.150 回答
-1

下面的示例可以轻松地从文本文件中删除多行。

输入文件名。

输入第一行编号:

输入编号。行,您要删除。

在评论下查看以下示例!

import java.io.BufferedReader;

import java.io.File;

import java.io.FileReader;

import java.io.FileWriter;


public class RemoveLines



{   
public static void main(String[] args)
{

   //Enter name of the file here
    String filename="foobar.txt";

    //Enter starting line here

    int startline=1;

    //Enter number of lines here.
    int numlines=2;

    RemoveLines now=new RemoveLines();
    now.delete(filename,startline,numlines);
}
void delete(String filename, int startline, int numlines)
{
    try
    {
        BufferedReader br=new BufferedReader(new FileReader(filename));

        //String buffer to store contents of the file
        StringBuffer sb=new StringBuffer("");

        //Keep track of the line number
        int linenumber=1;
        String line;

        while((line=br.readLine())!=null)
        {
            //Store each valid line in the string buffer
            if(linenumber<startline||linenumber>=startline+numlines)
                sb.append(line+"\n");
            linenumber++;
        }
        if(startline+numlines>linenumber)
            System.out.println("End of file reached.");
        br.close();

        FileWriter fw=new FileWriter(new File(filename));
        //Write entire string buffer into the file
        fw.write(sb.toString());
        fw.close();
    }
    catch (Exception e)
    {
        System.out.println("Something went horribly wrong: "+e.getMessage());
    }
}
于 2017-08-22T11:43:49.377 回答