java::processbuilder:bash脚本:返回的文件名正确,但filereader引发filenotfoundexception

fcipmucu  于 2021-06-29  发布在  Java
关注(0)|答案(0)|浏览(242)

谁能解释一下为什么会这样 FileNotFoundException 发生?
我正在试着得到最后的修改 file_name 从远程linux,这种方式工作并返回文件名:

ProcessBuilder pb = new ProcessBuilder();
ProcessBuilder pbSetPermissions = new ProcessBuilder();
pb.command("/bin/bash", "-c", "ls -t " + System.getProperty("user.dir") + " | head -n 1");
String fileName = IOUtils.toString(pb.start().getInputStream(), StandardCharsets.UTF_8);
System.out.println(fileName);
File folder = new File(System.getProperty("user.dir"));
String filePath = folder + "/" + DOWNLOADS_DIR + "/" + fileName;
pbSetPermissions.command("/bin/bash", "-c", "chmod 777 " + filePath);
pbSetPermissions.start();
System.out.println(filePath);

此外,它设置了文件的正确权限,我可以读取此文件,例如使用“nano”
但是,当我尝试从java filereader读取和解析这个文件时:

FileReader filereader = new FileReader(filePath);

我总是得到:

java.io.FileNotFoundException: (No such file or directory)

参见屏幕:

我已经解决了这个问题,得到了最后的答案 Modified File Name 另一种方式:

File file = findLastModified(System.getProperty("user.dir") + File.separator + DOWNLOADS_DIR);
System.out.println(System.getProperty("user.dir") + File.separator + DOWNLOADS_DIR);

public static File findLastModified (String sdir) {
    File dir = new File(sdir);
    if (dir.isDirectory()) {
        Optional<File> opFile = Arrays.stream(dir.listFiles(File::isFile))
                .max(Comparator.comparingLong(File::lastModified));
        if (opFile.isPresent()){
            return opFile.get();
        }
    }
    return null;
}

====================
但是我仍然不明白为什么bash脚本的第一种方法不起作用。文件名中似乎有一些隐藏的符号?或者是有编码的?因为从我看来文件路径是正确的。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题