Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 比较csv中的两列,并仅将唯一值写入另一个csv_Java_Csv - Fatal编程技术网

Java 比较csv中的两列,并仅将唯一值写入另一个csv

Java 比较csv中的两列,并仅将唯一值写入另一个csv,java,csv,Java,Csv,我对java相当陌生,我有一个包含8列的csv文件,我需要从包含5列的文件中创建新的csv。现在我已经这样做了,阅读csv并创建一个新的csv。但是原始csv中有重复的数据,场景是,如果数据重复,我只需要从中提取一行。例如: a、 123,价值1,a@email.com a、 123,价值1,a@email.com a、 123,价值1,a@email.com a、 第123页,第7页,a@email.com b、 567,价值5,b@email.com b、 567,价值6,b@email.c

我对java相当陌生,我有一个包含8列的csv文件,我需要从包含5列的文件中创建新的csv。现在我已经这样做了,阅读csv并创建一个新的csv。但是原始csv中有重复的数据,场景是,如果数据重复,我只需要从中提取一行。例如:

a、 123,价值1,a@email.com

a、 123,价值1,a@email.com

a、 123,价值1,a@email.com

a、 第123页,第7页,a@email.com

b、 567,价值5,b@email.com

b、 567,价值6,b@email.com

b、 567,价值6,b@email.com

与上述值一样,a的值1重复3次,b的值6重复2次。在我的新csv中,我只需要写一次这些值。因此,ourput看起来像这样:

a、 123,价值1,a@email.com

a、 第123页,第7页,a@email.com

b、 567,价值5,b@email.com

b、 567,价值6,b@email.com

下面是我为读写csv文件而编写的代码。我发现很难为上述场景找到逻辑。任何帮助都将不胜感激。 多谢各位

public static void main(String[] args) throws IOException {
    try {
        String row = "";
        List<List<String>> data = new ArrayList<>();
        Map newMap = new HashMap();
        BufferedReader br = new BufferedReader(new FileReader("myFile.csv"));
        row=br.readLine();
        while((row=br.readLine())!=null){
            String[] line = row.split(",", -1);
            //System.out.println(line[4]);
            //newMap.put(line[1], line[4]);
            List<String> newList = new ArrayList<String>();
            for (String cell : line) {
              newList.add(cell);
             // System.out.println(newList.get(3));
            }
            data.add(newList);

        }

         FileWriter csvWriter = new FileWriter("newFile.csv");
        //Write To New File
        //Add Headers
        csvWriter.append("User Name,"+"User LoginID,"+"User Position,"+"Permission,"+"Email Address"+"\n");
        for(List rowData:data) {
            if(rowData.toString().length()>1) {
            rowData.remove(5);
            rowData.remove(2);
            rowData.remove(4);
            newMap.put(rowData.get(0), rowData.get(3));
                csvWriter.append(String.join(",",rowData));
                csvWriter.append("\n");
        }
        }
        }

        csvWriter.flush();
        csvWriter.close();
    } catch (FileNotFoundException e) {

        e.printStackTrace();
    }

}
publicstaticvoidmain(字符串[]args)引发IOException{
试一试{
字符串行=”;
列表数据=新的ArrayList();
Map newMap=newhashmap();
BufferedReader br=新的BufferedReader(新文件阅读器(“myFile.csv”);
行=br.readLine();
而((row=br.readLine())!=null){
字符串[]行=行。拆分(“,”,-1);
//System.out.println(第[4]行);
//newMap.put(第[1]行,第[4]行);
List newList=newarraylist();
用于(字符串单元格:行){
添加(单元格);
//System.out.println(newList.get(3));
}
data.add(新列表);
}
FileWriter csvWriter=新的FileWriter(“newFile.csv”);
//写入新文件
//添加标题
追加(“用户名,+”用户登录名,“+”用户位置,“+”权限,“+”电子邮件地址“+”\n”);
对于(列表行数据:数据){
if(rowData.toString().length()>1){
rowData.remove(5);
rowData.remove(2);
rowData.remove(4);
newMap.put(rowData.get(0),rowData.get(3));
追加(String.join(“,”,rowData));
csvWriter.append(“\n”);
}
}
}
csvWriter.flush();
csvWriter.close();
}catch(filenotfounde异常){
e、 printStackTrace();
}
}

看不到您是如何获得用户/权限值的,因此我在这里随意指定一些位,我假设您已经有了:

Map userToPermissionMap=newhashmap();
//逐行读取CSV
字符串[]行=csvFileInput;//非实际代码
用于(字符串行:行){
字符串rowData=line.split(“,”);
字符串user=rowData[0];
字符串权限=行数据[3];
如果(!userToPermissionMap.contains(user)){
userToPermissionMap.put(user,new HashSet());
}
userToPermissionMap.get(用户).add(权限);
}
这仅显示如何对每个用户的权限进行分组。我猜你还是想记录下其他细节,但如果你认为合适的话,应该直接添加。然后将其写入新的CSV


或者,您可以删除发现重复的行。这可能会引入一个有趣的问题,即删除行,然后移动到下一行,而实际上,刚删除的行被替换为下一行。。。。如果您遵循此方法,请反向执行。不过,该方法与上述方法类似-您需要维护已看到的用户和权限列表,并且只保留尚未遇到用户/权限组合的行。

查看您的想法:

导入java.io.BufferedReader;
导入java.io.FileReader;
导入java.io.FileWriter;
导入java.io.IOException;
导入java.util.array;
导入java.util.HashMap;
导入java.util.HashSet;
导入java.util.List;
导入java.util.Map;
导入java.util.Set;
课堂擦伤{
公共静态最终整数用户_COL=0;
公共静态最终整数登录\u ID\u COL=1;
公共静态最终int用户位置COL=2;
公共静态最终整数权限\u COL=3;
公共静态最终整数=4;
私有静态映射userData=newhashmap();
私有静态映射userToPermissionMap=newhashmap();
公共静态void main(字符串[]args)引发IOException{
BufferedReader br=新的BufferedReader(新文件阅读器(“myFile.csv”);
String header=br.readLine();//存储头供以后使用
字符串rowEntry=null;
而((rowEntry=br.readLine())!=null){
String[]行=rowEntry.split(“,”);
字符串user=行[user_COL];
字符串权限=行[permission\u COL];
//如果我们在这里覆盖一个条目并不重要,因为我们每次都会提取唯一的权限,然后忽略它
userData.put(user,Arrays.asList(row));
如果(!userToPermissionMap.containsKey(用户)){
userToPermissionMap.put(user,new HashSet());//新用户
}
userToPermissionMap.get(user).add(permission);//向集合添加权限
}
FileWriter csvWriter=新的FileWriter(“newFile.csv”);
csvWriter.append(头+“\n”);//原始头的副本(可能不需要\n)
for(字符串用户:userToPermissionMap.keySet()){//for每个用户
对于(字符串权限:userToPermissionMap.get(user)){//对于每个唯一的权限
StringBuilder=新的StringBuilder();
builder.append(用户+“,”);
append(userData.get(user.get(LOGIN\u ID\u COL)+“,”);
append(userData.get(user.get)(US