【问题标题】:Checking file status and deleting it (Linux drive mapped in Windows)检查文件状态并删除它(在 Windows 中映射的 Linux 驱动器)
【发布时间】:2015-02-16 17:25:34
【问题描述】:

我编写了一个小应用程序来归档一组气象站的历史数据。我的程序执行以下操作:

  • 检查输入文件是否存在
  • 检查输入文件是否被其他程序打开(可能是从气象站发送数据的应用程序)。
  • 将所有内容附加到存档文件中。
  • 删除输入文件(下次有来自气象站的新数据时将再次创建)。

Java 程序在 Windows 机器上运行,如果访问本地文件,一切运行顺利(我可以检查文件是否存在以及是否正在使用)。但是当我们开始使用映射到 Windows 机器上的 Linux 驱动器时,我开始在存在检查中得到误报,在使用检查中得到误报。

关于我可以做些什么来让它发挥作用有什么想法吗?

这是我的代码:

File originalFile = new File (currentPath +  "\\" + line[1]);
if (originalFile.exists()) { 
    boolean fileIsNotLocked = originalFile.renameTo(originalFile);
    if (fileIsNotLocked) {

        /* WORK WITH THE FILE TO COPY ITS CONTENTS ETC */

        if(originalFile.delete())
            System.out.println("Successfully deleted file at = " + originalFile);
        else
            System.out.println("Could not delete file at = " + originalFile);
    }
}

【问题讨论】:

  • 好吧,考虑使用File.separator 而不是"\\"
  • 这是偶发行为,还是在映射驱动器上永远不会成功?我问是因为您提到了使用中检查的结果,但是如果 exists() 失败,那总是会失败。如果是这种情况并且@Everv0id 的 File.separator 建议不起作用,我会确认 currentPath 是您所期望的(地图上的不同驱动器号?)。
  • 另一种方法是将代码使用的所有文件保存在项目目录中并使用相对路径。
  • 这样可以保持简单,但对于将驱动器映射到其他地方的机器可能没有长期意义。还可以考虑检查System.out.println("Absolute path: " + originalFile.getCanonicalPath());
  • 问题其实很简单,如果不使用 JCIFS 库,我无法访问通过 Samba 共享的文件。

标签: java linux windows file delete-file


【解决方案1】:

作为记录,解决方案是使用 JCIFS 库:https://jcifs.samba.org/

【讨论】:

  • 您可以通过单击绿色对勾来接受您自己的答案。这标志着问题在 StackOverflow 中已解决。
  • 如果您推荐一个库,请说明如何应用它。在您的答案中添加一些示例代码。
猜你喜欢
  • 1970-01-01
  • 2020-05-02
  • 2013-05-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-22
  • 2011-10-14
  • 1970-01-01
  • 2017-09-18
相关资源
最近更新 更多