检查一行是在带有bufferedreader和hashset的文件中

时间:2012-03-10 17:56:49

标签: java hashset bufferedreader filewriter

我的问题是我必须编写代码来检查客户名是否已存在于我的txt文件(Customers.txt)中。

问题是我检查了hashset,如果客户在文件中,并且他说他不在文件中。(手动检查) 请帮我解决这个问题。

我已经拥有的代码如下。

    public class Customer {
    //declaration
    public static String S;
    private String line ;
    public String nameCustomer;


/**
 * constructor
 */
public Klant(){}

/**Checking of the customer is in the file
 */
public void getCustomer() {
    // make SimpleInOutDialog      
        SimpleInOutDialog  input = new SimpleInOutDialog("Customers");
        nameCustomer = input.readString("Give in the name");
    try{
    BufferedReader br = new BufferedReader(new FileReader("L:\\Documents/Informatica/6de jaar/GIP/Customers.txt"));
    HashSet<String> hs = new HashSet<String>();
    int i = 0;
    while ((line = br.readLine()) != null)
    {
        i++;
        if (i == 1){hs.add(br.readLine());}

        if (i % 4 == 0){hs.add(br.readLine());}

    }
    if(hs.contains(nameCustomer)){
        //the customer exists
     input.showString("The customer exists", "");
     }else{input.showString("The customer does not exist, we will make a new one", "");
         setNieuweKlant();}


    }catch (Exception e){//Catch when there are errors
        System.err.println("Error: " + e.getMessage());}

}


/**
 * make a new customer
 */

public void Make new customer(){
    // make SimpleInOutDialog     
    SimpleInOutDialog  input = new SimpleInOutDialog("A new customer");
    //input
    S = "Name customer: " + input.readString("Give in your name:");
WriteToFile();
S = "Adress: " + input.readString("Give your adress");
WriteToFile();
S = "Telephonenummber: " + input.readString("Give your telephonenumber");
WriteToFile();
//making a customerID
  UUID idCustomer = UUID.randomUUID();  
S = "CustomerID: " + customerID.toString();
WriteToFile();

}


/**
 * Schrijft de gegevens weg naar het bestand
 */


 public void WriteToFile(){
try{

FileWriter writer = new FileWriter("L:\\Documents/Informatica/6de jaar/GIP/Customer.txt", true);
BufferedWriter out = new BufferedWriter(writer);
//Wrting away your data
out.write(S);

//Closing the writer
out.close();


}catch (Exception e){//Catch when there are errors
    System.err.println("Error: " + e.getMessage());
    }
    }

荷兰语代码

public class Klant {
    //declaratie van de variabele die de tekst voorsteld
    public static String S;
    private String line ;
    public String naamklant;


/**
 * constructor
 */
public Klant(){}

/**Controleerd of de klant al bestaat
 */
public void getKlant() {
    // SimpleInOutDialog aanmaken     
        SimpleInOutDialog  input = new SimpleInOutDialog("Klanten");
        naamklant = input.readString("Geef de volledige naam in");
    try{
    BufferedReader br = new BufferedReader(new FileReader("L:\\Documents/Informatica/6de jaar/GIP/Klanten.txt"));
    HashSet<String> hs = new HashSet<String>();
    int i = 0;
    while ((line = br.readLine()) != null)
    {
        i++;
        if (i == 1){hs.add(br.readLine());}

        if (i % 4 == 0){hs.add(br.readLine());}

    }
    if(hs.contains(naamklant)){
        //klant bestaat
     input.showString("De klant bestaat", "");
     }else{input.showString("De klant bestaat niet, er wordt een nieuwe klant aangemaakt", "");
         setNieuweKlant();}


    }catch (Exception e){//Catch wanneer er errors zijn
        System.err.println("Error: " + e.getMessage());}

}


/**
 * Maakt een nieuwe klant aan 
 */

public void setNieuweKlant(){
    // SimpleInOutDialog aanmaken     
    SimpleInOutDialog  input = new SimpleInOutDialog("Een nieuwe klant");
    //input
    S = input.readString("Geef de volledige naam in");
    WriteToFile();
    S = "Adres: " + input.readString("Geef het adres op");
    WriteToFile();
    S = "Telefoonummer: " + input.readString("Geef het telefoonnummer op");
    WriteToFile();
    //een klantennummer aanmaken 
      UUID idKlant = UUID.randomUUID();  
    S = "Klantnummer: " + idKlant.toString();
    WriteToFile();

}


/**
 * Schrijft de gegevens weg naar het bestand
 */
public void WriteToFile(){

    try{

        FileWriter writer = new FileWriter("L:\\Documents/Informatica/6de jaar/GIP/Klanten.txt", true);
        BufferedWriter out = new BufferedWriter(writer);
        //uw gegevens wegschrijven
        out.write(S);
        out.newLine();
        //de writer sluiten
        out.close();


    }catch (Exception e){//Catch wanneer er errors zijn
        System.err.println("Error: " + e.getMessage());}



    }


}

2 个答案:

答案 0 :(得分:1)

此:

    while ((line = br.readLine()) != null)
    {
        i++;
        if (i == 1){hs.add(br.readLine());}

        if (i % 4 == 0){hs.add(br.readLine());}

    }

可能应该是这样的:

    while ((line = br.readLine()) != null)
    {
        i++;
        if (i == 1)
            hs.add(line);
        if (i % 4 == 0)
            hs.add(line);
    }

那就是 - 你可能想要add你刚刚阅读的那一行,而不是阅读 new 行并add

答案 1 :(得分:0)

我真的不确定你要整体做什么(阅读每4行等等),但如果你想要的是检查一个字符串是否存在,我就不会使用HashSet在文件中。

这是一个完整的程序,用于检查文件中是否存在字符串:

import java.io.*;

public class CheckName
{
  private static boolean doesNameExistInFile(String name, String filename)
    throws FileNotFoundException, IOException
  {
    BufferedReader reader = new BufferedReader(new FileReader(filename));

    String line = null;

    try {
      while ((line = reader.readLine()) != null) {
        if (line.equals(name))
          return true;
      }

    } finally {
      // Always close() before exiting.
      reader.close();
    }

    return false;
  }

  public static void main(String[] args)
    throws FileNotFoundException, IOException
  {
    boolean exists = doesNameExistInFile("Bender", "input.txt");

    System.out.println(exists ? "Exists!" : "Does not exist.");
  }
}

输入文件input.txt的内容:

Leela
Fry
Professor
Hermes
Zoidberg

有几点需要注意:

  1. 我们不读取整个文件。一旦我们找到了字符串,我们就会停止阅读,因为这就是我们感兴趣的所有内容。
  2. 退出前始终close(),是否找到字符串。我们将调用放在finally块中。