首页 > 解决方案 > 在Java程序中使用bash检查文件是否存在?

问题描述

所以我想用一个java程序来与文件系统交互。Java 程序本身不能以超级用户身份运行。我为这个程序创建了一个特殊用户,并赋予它一些特殊权限来运行一些没有密码的命令(通过 visudo 文件)。

所以我想检查一个文件是否存在。我用过:
if(f.exists() && !f.isDirectory())但问题是,如果我检查文件是否存在受读/写保护或是否属于另一个用户,则会失败。
这就是为什么我需要使用 bash。例如,当我检索有关文件的信息时,我使用以下内容:
String[] command = new String[] { "sudo", "stat", filepath, "-c", "%F@@%s@@%U@@%G@@%X@@%Y@@%Z" };
process = runtime.exec(command);然后只解析输出。

例如移动一个文件我使用这个:

String[] command = new String[] {
            "sudo",
            "-u",
            user,
            "mv",
            source,
            target
};

所以现在我正在寻找一种在检查文件是否存在时获得简单的真/假响应的方法。

我想我可以使用find命令或类似的东西?

标签: linuxbashjava

解决方案


我已经使用以下命令解决了我的问题:
String[] command = new String[] { "sudo", "-u", user, "test", "-f", path };

其中用户是我正在运行命令的用户。path 是我们正在测试的文件路径。

然后我在下面的代码中读取了执行和读取命令的输出。我希望有一天它可以帮助某人...

process = runtime.exec(command);

            errbr = new BufferedReader(new InputStreamReader(process.getErrorStream()));
            while ((messageLine = errbr.readLine()) != null) {
                message += messageLine + ";";
            }

            br = new BufferedReader(new InputStreamReader(process.getInputStream()));
            while ((messageLine = br.readLine()) != null) {
                message += messageLine;
            }

推荐阅读