linux - 在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
命令或类似的东西?
解决方案
我已经使用以下命令解决了我的问题:
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;
}
推荐阅读
- javascript - js share array between thread
- algorithm - Minimizing the maximum cost of job assignment problem
- c - 将科学计数法中的数字转换为十进制
- pine-script - Pine 脚本:使用 plotshapes 时停用数字显示
- python - How to calculate proportion display pie chart in pandas or others?
- dictionary - Dart won't compile because of unmatching types, 'List
' can't be assigned to the parameter type 'List Function()' - typo3 - TYPO3 10.4: Menu of subpages with image
- callback - Gstreamer splitmuxsink callback when a new file is created
- python - SQL Query, Getting Rid of Repeat Selects
- elasticsearch - Named rescore queries