java - 有没有读取UNIX/etc/group文件的Java包?

标签 java class posix

我一直在 Internet 上搜索可以让我解析 UNIX/etc/group 文件的 Java 包/类。虽然从头开始写这个真的不难,但我很惊讶没有找到已经存在的东西。有一个 POSIX passwd 类(请参阅 http://www.bmsi.com/java/posix/docs/posix.Passwd.html ),但我没有为/etc/group 找到类似的类。有这种东西吗?

最佳答案

这是我再次更新的 tofubeer 更新的代码。他没有编译。缺少 InvalidGroupException 类。此外,没有指定包。将 EMPTY_LIST 切换为 emptyList() 以避免缺少参数化。

package fileutils;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;

public class GroupReader2 {
    public static class InvalidGroupException extends Exception {
        private static final long serialVersionUID = 1L;

        public InvalidGroupException(String string) {
            super(string);
        }
    }

    public static GroupReader2 parseGroup(final String groupLine)
            throws InvalidGroupException {
        final String line;
        final String[] parts;

        if (groupLine == null) {
            throw new IllegalArgumentException("groupLine cannot be null");
        }

        line = groupLine.trim();

        if (line.startsWith("#") || line.isEmpty()) {
            return null;
        }

        parts = line.split(":");

        if (parts.length < 3) {
            throw new InvalidGroupException(groupLine
                    + "must be in the format of name:passwd:gid[:userlist]");
        }

        try {
            final GroupReader2 group;
            final String name;
            final String passwd;
            final int gid;
            final List<String> userList;

            name = parts[0];
            passwd = parts[1];
            gid = Integer.parseInt(parts[2]);

            if (parts.length == 4) {
                userList = Arrays.asList(parts[3].split(","));
            } else {
                userList = Collections.emptyList();
            }

            group = new GroupReader2(name, passwd, gid, userList);

            return group;
        } catch (final NumberFormatException ex) {
            throw new InvalidGroupException(groupLine + " gid must be a number");
        }
    }

    private final int gid;
    private final String name;
    private final String passwd;

    private final List<String> userList;

    public GroupReader2(final String nm, final String pw, final int id,
            final List<String> users) {
        name = nm;
        passwd = pw;
        gid = id;
        userList = Collections.unmodifiableList(new ArrayList<String>(users));
    }

    public int getGid() {
        return (gid);
    }

    public String getName() {
        return (name);
    }

    public String getPasswd() {
        return (passwd);
    }

    public List<String> getUserList() {
        return (userList);
    }

    @Override
    public String toString() {
        final StringBuilder sb;

        sb = new StringBuilder();
        sb.append(name);
        sb.append(":");
        sb.append(passwd);
        sb.append(":");
        sb.append(gid);
        sb.append(":");

        for (final String user : userList) {
            sb.append(user);
            sb.append(",");
        }

        sb.setLength(sb.length() - 1);

        return (sb.toString());
    }
}

关于java - 有没有读取UNIX/etc/group文件的Java包?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/617165/

相关文章:

java - CFPDF 或 Java : get trimbox size of pdf file

c++ - 使用父类中的变量

jQuery:为多个计数的单击元素分配类

c++ - 在 C++ 中使用 posix pipe() 和 dup() 来重定向 I/O 问题

java - 如何从JTable中的数据库中获取数据?

java - 在Java中改变RGB颜色

iphone - 将完整的类对象存储到 iPhone 中的数据库中

multithreading - 有没有人见过像这样处理线程的编程语言?

无法设置 POSIX 消息队列属性

java - java打印时如何调整页面宽度