如何使用Java通过删除重复数据从列表中写入现有文件?

如何使用Java通过删除重复数据从列表中写入现有文件?,java,file,Java,File,我想在存在的文件中写入。 我的数据是java列表的形式。 以下是数据示例: snmp,192.168.20.1,cloud, snmp,192.168.20.2,cloud, 我想在文件中添加snmp行192.168.20.1和cloud123。 它应该通过给定的新内容更新现有文件内容,即(snmp,192.168.20.1,云) 若提供的内容不同于文件的内容,那个么将其附加到文件中 这是我的解决办法--- 我建议您创建具有唯一项的列表,而不是检查和比较文件中的内容。这将节省您分析文件内容和更

我想在存在的文件中写入。 我的数据是java列表的形式。 以下是数据示例:

snmp,192.168.20.1,cloud,
snmp,192.168.20.2,cloud,
我想在文件中添加snmp行192.168.20.1和cloud123。 它应该通过给定的新内容更新现有文件内容,即(snmp,192.168.20.1,云)

若提供的内容不同于文件的内容,那个么将其附加到文件中

这是我的解决办法---


我建议您创建具有唯一项的列表,而不是检查和比较文件中的内容。这将节省您分析文件内容和更新文件和代码操作的时间。首先,请将所有现有数据集添加到列表中。现在,使用for循环迭代您的新列表(需要追加),并获得一个内部循环、检查条件和add/skip

伪代码:

List my_existing_list;
List my_new_list;

foreach(my_new_list){

     foreach(my_existing_list){

        if(equal to an existing item){

          //skip

        }else{

           //append to file
         }

     }

}

使用临时文件临时存储文件的内容

下面是一个代码:

            ListIterator atwlist = arraytowrite.listIterator();
        while (atwlist.hasNext()) {
            ArrayList atwlistline = (ArrayList) atwlist.next();

            ListIterator atwlistlineL = atwlistline.listIterator();
            while (atwlistlineL.hasNext()) {

                firstWriter.write((String) atwlistlineL.next());
                firstWriter.write(",");
            }
            //firstWriter.write("\n");
            System.out.println(atwlistline);
        }
        firstWriter.close();

        //Write original file contents to another file i.e. tempFile2 
        try{
        FileReader fileReader = new FileReader(filename);
        BufferedReader bufferedReader = 
                new BufferedReader(fileReader);
        String line = "";
        while((line = bufferedReader.readLine()) != null) {
            secondWriter.write(line);
            secondWriter.write("\n");
        }
        secondWriter.close();
        bufferedReader.close();
        }catch(IOException ie){
            ie.printStackTrace();
            System.out.println("Exception occured while reading from main file");
        }
        //check and remove duplicate entries from file
        try{
        FileReader singleDeviceReader = new FileReader(file1Path);
        FileReader duplicateDeviceReader = new FileReader(file2Path);
        finalWriter = new PrintWriter(filename);

        BufferedReader bufferedReader1 = new BufferedReader(singleDeviceReader);
        BufferedReader bufferedReader2 = new BufferedReader(duplicateDeviceReader);
        String line1 = null;
        String line2 = null;
        boolean fileWriteFlag = false;
        String ifNotFind = "";
        while((line1 = bufferedReader1.readLine())!=null){
            String[] line1Split = line1.split(",");
            ifNotFind = line1;
            while((line2 = bufferedReader2.readLine())!=null){
                String[] line2Split = line2.split(","); 
                if (line2Split[1].equals(line1Split[1])){
                    finalWriter.write(line1);
                    finalWriter.write("\n");
                    fileWriteFlag = true;
                }
                else {
                    finalWriter.write(line2);
                    finalWriter.write("\n");

                }
            }
        }
        if(!fileWriteFlag){
            finalWriter.write(ifNotFind);
        }
        finalWriter.close();
        bufferedReader1.close();
        bufferedReader2.close();

        File t1 = new File (file1Path);
        File t2 = new File (file1Path);
        if (t1.exists()){
            t1.delete();
        }
        if (t2.exists()){
            t2.delete();
        }
        }catch (IOException ioe ){
            ioe.printStackTrace();
            System.out.println("Exception occured while reading both temp files");
        }

那么实际的问题是什么呢?看看sqlite数据库API或其他数据库。否则,您将重新发明轮子。我无法写入tempFile以及原始文件
            ListIterator atwlist = arraytowrite.listIterator();
        while (atwlist.hasNext()) {
            ArrayList atwlistline = (ArrayList) atwlist.next();

            ListIterator atwlistlineL = atwlistline.listIterator();
            while (atwlistlineL.hasNext()) {

                firstWriter.write((String) atwlistlineL.next());
                firstWriter.write(",");
            }
            //firstWriter.write("\n");
            System.out.println(atwlistline);
        }
        firstWriter.close();

        //Write original file contents to another file i.e. tempFile2 
        try{
        FileReader fileReader = new FileReader(filename);
        BufferedReader bufferedReader = 
                new BufferedReader(fileReader);
        String line = "";
        while((line = bufferedReader.readLine()) != null) {
            secondWriter.write(line);
            secondWriter.write("\n");
        }
        secondWriter.close();
        bufferedReader.close();
        }catch(IOException ie){
            ie.printStackTrace();
            System.out.println("Exception occured while reading from main file");
        }
        //check and remove duplicate entries from file
        try{
        FileReader singleDeviceReader = new FileReader(file1Path);
        FileReader duplicateDeviceReader = new FileReader(file2Path);
        finalWriter = new PrintWriter(filename);

        BufferedReader bufferedReader1 = new BufferedReader(singleDeviceReader);
        BufferedReader bufferedReader2 = new BufferedReader(duplicateDeviceReader);
        String line1 = null;
        String line2 = null;
        boolean fileWriteFlag = false;
        String ifNotFind = "";
        while((line1 = bufferedReader1.readLine())!=null){
            String[] line1Split = line1.split(",");
            ifNotFind = line1;
            while((line2 = bufferedReader2.readLine())!=null){
                String[] line2Split = line2.split(","); 
                if (line2Split[1].equals(line1Split[1])){
                    finalWriter.write(line1);
                    finalWriter.write("\n");
                    fileWriteFlag = true;
                }
                else {
                    finalWriter.write(line2);
                    finalWriter.write("\n");

                }
            }
        }
        if(!fileWriteFlag){
            finalWriter.write(ifNotFind);
        }
        finalWriter.close();
        bufferedReader1.close();
        bufferedReader2.close();

        File t1 = new File (file1Path);
        File t2 = new File (file1Path);
        if (t1.exists()){
            t1.delete();
        }
        if (t2.exists()){
            t2.delete();
        }
        }catch (IOException ioe ){
            ioe.printStackTrace();
            System.out.println("Exception occured while reading both temp files");
        }