有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何从csv文件中删除特定条目?

我有一个java程序,可以将地址保存和删除到csv文件中。现在我想从csv文件中删除一个特定的地址,所以我为此编写了一个函数 就像

public String deleteAddress(String firstName,String LastName,String msg) throws IOException{
  Iterator<Address> it = addressBook.iterator();
  n=msg;
        while(it.hasNext()){
            Address newObj = it.next();
            if((newObj.getFirstName().equalsIgnoreCase(firstName) == true) && (newObj.getLastName().equalsIgnoreCase(LastName) == true)){
                File newfile = new File("address.csv");
                BufferedWriter bw = new BufferedWriter(new FileWriter(newfile));
                it.remove();
                n="found and removed";
            }
       }


       for(Address newObj : addressBook){
            AddressBookSave.saveAddressBookToFile(newObj);
      }
       return n;
}
}

但它没有正常工作。谁来帮我修一下


共 (1) 个答案

  1. # 1 楼答案

    执行删除和添加的代码(包括加载和保存文件的逻辑)缺失或不完整。看起来你想要做的其实很简单

    我不知道你的具体要求是什么,我说得不对。然而,这里有一个完整的示例类,我用Groovy编写(非常接近Java,但更好),它实现了我“认为”您试图实现的目标。如果这确实对你有帮助,请把这个例子标记为一个明确的答案

    请随意运行下面的Groovy类并进行尝试

    import groovy.transform.Canonical
    
    import javax.swing.*
    
    public class AddressBook {
        List<Address> addressBook = new ArrayList<>();
        String filePath;
    
        public String deleteAddress(String firstName, String lastName) {
            String result = "Not Found"
            Iterator<Address> iter = addressBook.iterator();
            while(iter.hasNext()){
                Address addy = iter.next();
                if ((addy.getFirstName().equalsIgnoreCase(firstName)) && (addy.getLastName().equalsIgnoreCase(lastName))) {
                    iter.remove();
                    result = "Address was found and removed..save to update the file.";
                }
            }
    
            println result;
            return result;
        }
    
        void addAddress(String firstName, String lastName, String addyString){
            addressBook.add(new Address("firstName":firstName, "lastName":lastName, "address":addyString));
            println "Address added..save to update the file.";
        }
    
        void saveAddressBookToFile() throws IOException{
            BufferedWriter bw = null;
            println "Saving addresses to file: " + filePath;
            try{
                File file = new File(filePath);
                bw = new BufferedWriter(new FileWriter(file));
                file.createNewFile()
                for(Address addy: addressBook){
                    bw.write(addy.toString() + "\n");
                }
                bw.flush();
            }
            finally{
                if(bw){
                    bw.close();
                }
            }
        }
    
        void loadAddressBook(String path) throws IOException{
            addressBook.clear();
            filePath = path;
            BufferedReader br = null;
            try{
                List<String> lines = new BufferedReader(new FileReader(path)).readLines();
                for(String line: lines){
                    addressBook.add(new Address(line));
                }
                println path + " loaded successfully."
            }
            catch(FileNotFoundException fnfe){
                println "File " + path + " does not exist, nothing loaded.";
            }
            finally {
                if (br) {
                    br.close()
                }
            }
        }
    
        void printLoadedAddresses(){
            for(Address addy: addressBook){
                println addy.prettyString();
            }
        }
    
        public static void main(String... args) {
            AddressBook ab = new AddressBook();
            String readln = ' '
    
            while(readln){
                readln = JOptionPane.showInputDialog('Please input a valid command: load, add, delete, save')
    
                if (readln) {
                    args = readln.split()
                    switch (args[0]) {
                        case "load":
                            if (args.length < 2) {
                                println("You did not provide the second argument for the address csv file path.")
                                break;
                            } else {
                                ab.loadAddressBook(args[1])
                            }
                            break;
                        case "add":
                            if(args.length < 4){
                                println("Please provide the firstName, lastName, and address parameters when adding.")
                            }
                            else {
                                ab.addAddress(args[1], args[2], args[3..-1].join(" "));
                            }
                            break;
                        case "delete":
                            if(args.length < 3){
                                println("Please provide the firstName, lastName, and address parameters when deleting.")
                            }
                            else {
                                ab.deleteAddress(args[1], args[2]);
                            }
                            break;
                        case "save":
                            if (ab.filePath) {
                                ab.saveAddressBookToFile();
                            } else {
                                println("You must first call load with a file path for the csv file (even it it doesn't exist yet.")
                            }
                            break;
                        case "print":
                            ab.printLoadedAddresses();
                            break;
                        case "exit":
                            System.exit(0)
                        default:
                            println "Unrecognized command: " + args[0]
                    }
                }
            }
        }
    }
    
    @Canonical
    class Address {
        String firstName;
        String lastName;
        String address;
    
        public Address(){
            super
        }
    
        public Address(String csvString){
            List<String> tokens = csvString.split(",");
            firstName = tokens[0];
            lastName = tokens[1];
            address = tokens[2]
        }
    
        @Override
        public String toString(){
            return firstName + "," + lastName + "," + address;
        }
    
        public String prettyString(){
            return firstName + " " + lastName + " - " + address;
        }
    }