有 Java 编程相关的问题?

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

nio使用Java解析文件值

我是Java新手,我想使用Java阅读此文件内容:

Filename                          Type        Size     Used    Priority
/dev/mapper/VolGroup00-LogVol01   partition   524280   0       -1
/dev/mapper/VolGroup00-LogVol02   partition   324280   0       -1

你能给我看一些使用Java8的工作示例吗

这是迄今为止的代码:

private static HashMap<String, HashMap<String, Long>> totalSwap() throws FileNotFoundException, IOException
    {
        File file = new File("/proc/swaps");
        if (!file.exists())
        {
            System.err.println("/proc/swaps did not exist!");
            return null;
        }
        else if (file.isDirectory())
        {
            System.err.println("/proc/swaps is a directory, not a file.");
            return null;
        }

        Pattern pattern = Pattern.compile("([\\/A-Za-z0-9]+)[\\s]+([a-z]+)[\\s]+([0-9]+)[\\s]+([0-9]+)[\\s]+([\\-0-9]+).*");
        BufferedReader reader = new BufferedReader(new FileReader("/proc/swaps"));

        String s = reader.readLine();
        while (s != null)
        {
            Matcher matcher = pattern.matcher(s);
            if (matcher.matches())
            {
                HashMap<String, Long> usageData2 = new HashMap<>();
                usageData2.put("allSwap", Long.parseLong(matcher.group(3)));
                usageData2.put("utilizedSwap", Long.parseLong(matcher.group(4)));

                data.put("First", usageData2);
            }
            s = reader.readLine();
        }
        reader.close();

        return data;
    }

我不知道如何读取文件名列。最后,我想得到这个结果:

HashMap</dev/mapper/VolGroup00-LogVol01, HashMap<Size, 524280>
                                         HashMap<Used, 0>>
HashMap</dev/mapper/VolGroup00-LogVol02, HashMap<Size, 334220>
                                         HashMap<Used, 0>>

你能帮我解决这个问题吗


共 (2) 个答案

  1. # 1 楼答案

    也许最好使用带有分隔符选项卡(“\t”)的StringTokenizer并检索所需的列

  2. # 2 楼答案

    如果我没记错的话,使用tab-delimeter进行拆分可能更好,linux是使用tab字符进行输出的

    我不得不临时修改youre代码,但重新插入代码应该很容易

    请参见下面的示例:

    private static HashMap<String, HashMap<String, Long>> totalSwap()
    {
        HashMap<String, HashMap<String, Long>> data = new HashMap<String, HashMap<String, Long>>();
        Pattern pattern = Pattern.compile("([\\/A-Za-z0-9]+)[\\s]+[A-Za-z]+[\\s]+([0-9]+)[\\s]+([0-9]+)[\\s]+([\\-0-9]+).*");
        String s = "/dev/mapper/VolGroup00-LogVol01\tpartition\t524280\t0\t-1\n/dev/mapper/VolGroup00-LogVol02\tpartition\t324280\t0\t-1";
        String[] columns = s.split("\t");
        for (String line : columns) {
            HashMap<String, Long> usageData2 = new HashMap<>();
            usageData2.put("allSwap", Long.parseLong(columns[2]));
            usageData2.put("utilizedSwap", Long.parseLong(columns[3]));
            data.put(columns[0], usageData2);
        }
    
        return data;
    }