如何在Unix上从Java中检查文件是否存在且可执行?

3
我正在尝试在Java进程内部检查Unix中的文件是否存在。
我遇到了Runtime.getRuntime().exec()的问题。我要运行的命令是test -x $VAR/path/to/file,请注意路径中的Unix变量。
该命令返回0或1,但我不知道如何从Java中获取指示。
目前我正在做的是:
String cmd = "test -x $VAR/filename";
Process proc = Runtime.getRuntime().exec(cmd);
int exitCode = proc.waitFor();

我还可以在命令中添加;echo $?,这会打印出0/1的值,但我不知道如何获取命令的输出。


3
File.exists()System.getenv()组合使用可以完成任务,无需外部进程。额外的奖励是这个解决方案也是跨平台的。 - biziclop
Process类还有两种获取输出的方法:Process.getOutputStream()Process.getErrorStream() - olexd
2个回答

3
我认为您正在寻找 File#exists()File#canExecute() 来检查文件是否存在以及检查它是否可执行。请注意,保留了HTML标签。

2
根据Javadoc,实际上canExecute()应该已经足够了,因为它还会检查文件是否存在。 - Marvin
@Marvin - 嗯,不完全是这样,如果文件存在但不是可执行的呢? - TheLostMind
4
@TheLostMind:我把问题理解为“我想要检查两个需求,并且不关心哪一个失败了”。如果差异很重要,那么你当然也需要使用exists() - Marvin

2
您可以使用Java.io.File类。它有canExecute()exists()方法。
例子:
//Create new File
File file = new File("C:/test/testFile.exe");

//Check if file exists
if (file.exists()) {
    System.out.println("The File Exists");

    //Check if file is executable
    if (file.canExecute()) {
        System.out.println("The File is executable");
    }
}

对于环境变量,我们可以使用 System.getenv(VAR) - buddy123
2
请不要使用 == true。只需使用方法的返回值即可。 - Ian McLaird

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接