在java中操作文本文件

时间:2012-08-30 09:28:52

标签: java

我想显示存储在文本文件中的所有客户,但是一个客户存储在许多文本文件中,并且他显示的次数超过一次。如何消除这些客户的重复?我甚至尝试过使用HashSet但是没有用。这是我的代码。

public class ReadFile {

private int countCustomer = 0;  
private File path;
private List<Customer> customers = new ArrayList<Customer>();

public ReadFile(File file_path) {

    path = file_path;

}

public String[] openFile() throws IOException {

    FileReader fr = new FileReader(path);
    BufferedReader br = new BufferedReader(fr); 
    int numberOfLines = readLines();
    String[] textData = new String[numberOfLines];
    for (int i = 0; i < numberOfLines; i++)
    {
        textData[i] = br.readLine();

    }

    br.close(); 
    return textData;
}

public void arrayCustomer(){

    try{
        String[] array = openFile();    
        for (int j=0; j< array.length;j++)   
        {
            String str = array[j];  
            String[] temp;
          String delimiter = " ";   

          temp = str.split(delimiter);

          String category = temp[0];  
          double balance = Double.parseDouble(temp[1]);   
          int moveNumber = Integer.parseInt(temp[2]);    
          int accountNumber = Integer.parseInt(temp[3]); 

          if (!isIn(new Customer(category, balance, moveNumber, accountNumber)))
          {
        customers.add(new Customer(category, balance, moveNumber, accountNumber)); 
        countCustomer++;
          }
        }
    }
    catch(IOException e){
        e.printStackTrace();
    }

}

public boolean isIn(Customer customer){

    for (int i = 0; i < customers.size(); i++){
        if (customers.get(i).getAccountNumber() == customer.getAccountNumber())
        {
            return true;
        }
    }
    return false;
}

public void listCustomers() {
    for (Customer customer : customers) {
        System.out.print("Category: " + customer.getCategory());
        System.out.print(" Balance: " + customer.getBalance());
        System.out.print(" Moves: " + customer.getMoveNumber());
        System.out.println(" Account number: " + customer.getAccountNumber());
    }
}


public int readLines() throws IOException {

    FileReader fr = new FileReader(path);
    BufferedReader br = new BufferedReader(fr);

    int numberOfLines = 0;
    String aLine;

    while((aLine = br.readLine()) != null) 
    {
        numberOfLines++;
    }
        br.close();
        return numberOfLines;
}



// The class with the main method

public class FileList {

public static Scanner scan;
public static ReadFile f;
public static final File folder = new File("C:/My_dir");

public static void main(String[] args) {

    Logger logger = Logger.getLogger("textfiles");
    scan = new Scanner(System.in);
    File[] listOfFiles = folder.listFiles();

    for (int i = 0; i < listOfFiles.length; i++)
    {   
        File fileEntry = listOfFiles[i];

        if (!fileEntry.isDirectory()) 
        {
            try{
                f = new ReadFile(fileEntry);
                f.openFile();
                f.arrayCustomer();
                f.listCustomers();
                }
                catch(IOException e)
                {
                    e.printStackTrace();
                }
        }
        else
            {
            logger.log(Level.INFO, "The directory is empty!");
            }
    }

1 个答案:

答案 0 :(得分:2)

如果Set被正确定义,Customer应该可以解决问题。您需要确保Customer同时具有equals()hashCode()对象,这些对象在同一组字段上运行,并且可以正确识别两个客户是否与定义的“相同”根据您的商业标准。