csv文件返回特定行(java / swing)

时间:2015-12-08 20:08:58

标签: java swing csv

我有一个过滤csv文件的问题。在我的GUI用户中,根据我要删除csv文件的测试用例名称选择他的测试用例名称。例如,我从JTable case1和case2中选择并将它们存储在字符串列表[case1,case2]中,如何获得测试名称为case1和case2的唯一行。

我尝试读取csv文件并创建jtable和动作侦听器,将选择的测试用例存储为列表中的字符串并且它们有效。然而;过滤部分我真的不知道吗?

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

如果我理解正确,您希望从某处获取测试用例的名称并将其存储在列表中,如下所示:

List<String> cases = Arrays.asList("case1", "case9");

然后,您想要阅读包含许多案例的文件,包括case1case9,并且您只想选择这些行。如果正确,则假设您有以下文件:

case1, a, b, c, ...
case2, x, y, z, ...
case9, aa, b, cc, ..
case22, 1,2,3, ...

我会使用Java 8&#39; Stream逐行读取文件,只选取包含cases元素的文件行,如上所述。 Stream将逐行读取文件,选择一行,将其发送到另一个方法以检查该行是否包含cases列表中的任何测试用例,如果是,则返回true并{{ 1}}将该行保存在Stream列表中。如果该行不包含任何测试用例,则Stream会跳过该行。见下面的示例代码。

readCases

以上输入的输出为:

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public class ReadFileStream {
    public static void main(String[] args) throws IOException {
        //cases that you picked from table
        List<String> cases = Arrays.asList("case1", "case9");

        //open stream to file, please change directory and filename
        Stream<String> lines = Files.lines(Paths.get("C:\\test_java", "filterfile.txt"));

        //loop through stream line by line, pick up those that match
        List<String> readCases = lines.filter(line -> containsAll(line, cases)).collect(Collectors.toList());

        lines.close();
        System.out.println(readCases);
    }

    //this is a simple method that performs String's contains() for each
    //case in the list. 
    public static boolean containsAll(String line, List<String> cases) {
        for (String s : cases) {
            if (line.contains(s)) {
                return true;
            }
        }
        return false;
    }
}