linux - 在Java程序中使用bash检查文件是否存在?

标签 linux bash java

所以我正在编写一个与文件系统交互的java程序。 Java程序本身不能以 super 用户身份运行。我为此程序创建了一个特殊用户,并赋予它一些特殊权限来运行一些无需密码的命令(通过 visudo 文件)。

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

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

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

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

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

最佳答案

我已经使用以下命令解决了我的问题:
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;
            }

关于linux - 在Java程序中使用bash检查文件是否存在?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59755216/

相关文章:

linux - 如何从网络上的另一台机器访问docker mediawiki?

c# - Asp.net Core Websocket 与 linux/docker 兼容吗?

linux - 在不丢失原始排序顺序的情况下进行子排序?

java - SaxonB 9.0 与 SaxonB 9.1.0.8 和 xs :boolean vs. xs:字符串类型错误

java - Java 中二维 int 数组优化的洪水填充

linux - 如何将文件复制到远程Linux服务器中的共享帐户

c linux msync(MS_ASYNC) 刷新顺序

r - 将 Rscript 中的 bool 值输出到 Bash 变量中

python - Bash 与 Python 中视觉相似字符串的 SHA256 有所不同

java - 为什么 Hibernate 对惰性关系属性字段执行 SELECT 查询