在Windows上没有删除和重命名文件,但在Mac上可以使用

斯蒂芬·库里3093

我在Mac上编写了代码。我正在创建两个文件,将它们分别命名为file1和file2。对于file1,如果我在SQL中找到比在file1中存储的表更大的记录,则将所有内容写入临时文件,删除file1并将该临时文件重命名为文件1。在Windows和Mac上均可使用。

对于file2,如果在SQL中找到表的时间戳记值大于在file2中存储的时间戳记值,则执行相同的过程。这在我的Mac环境中本地运行,但是在Windows上无法删除和重命名该文件。

但是,当我第一次启动该程序时,由于我的缓冲写入器总是先写入一个临时文件,然后重命名该临时文件,因此,file2的重命名和删除操作在我第一次运行该程序时就起作用了,这意味着file2和file1都不存在。

因此,在启动时,file2不存在。缓冲的编写器将写入tempFile,如果存在则删除file2(在这种情况下不存在),然后将tempFile重命名为file2。这行得通。但是,新数据的后续记录无法删除和重命名file2。但是正如我所说,这在Mac上有效,但在Windows上无效。

用于删除和重命名file1的代码(适用于Windows和Mac):

private void recordMaxRecordIdFromHistory(String table, String maxRecord) {
    String line;
    try {
      File file1 = new File(file1);
      File tempFile = new File("tempFile.txt");

      FileWriter fw = new FileWriter(tempFile, false);
      BufferedWriter bw = new BufferedWriter(fw);

      if (!file1.exists()) {
        file1.createNewFile();
      }
      FileReader fr = new FileReader(file1);
      BufferedReader br = new BufferedReader(fr);

//writing to temp file
      if(){
        ....
      }
      else{
        ....
      }

      bw.close();
      br.close();
      if (file1.delete()) {
        logger.info("Successfully deleted the max ID file");
      } else {
        logger.error("Unable to delete the file maxID File");
      }
      if (tempFile.renameTo(file1)) {
        logger.info("Successfully renamed the tempFile to file1");
      } else {
        logger.error("Unable to rename the tempFile to file1");
      }

    } catch (Exception ex) {
      logger.error(ex.getMessage());
    }
  }

用于删除和重命名File2的代码(仅在Mac上运行,并且仅在Windows上首次运行程序时可用)

 private void recordLastModifiedDate(String table, Timestamp modifiedDate) {

    String line;

    try {
      File file2 = new File(file2);
      File tempFile2 = new File("tempFile2.txt");

      FileWriter fw = new FileWriter(tempFile2, false);
      BufferedWriter bw = new BufferedWriter(fw);

      if (!file2.exists()) {
        file2.createNewFile();
      }
      FileReader fr = new FileReader(file2);
      BufferedReader br = new BufferedReader(fr);

      //WRITING TO FILE HERE

      bw.close();
      br.close();

      if (file2.delete()) {
        logger.info("Successfully deleted the lastModified file");
      } else {
        logger.error("Unable to delete the lastModified file");
      }

      if (tempFile2.renameTo(file2)) {
        logger.info("Successfully renamed the tempFile to lastModified");
      } else {
        logger.error("Unable to rename the tempFile to lastModified");
      }

    } catch (Exception ex) {
      logger.error(ex.getMessage());
    }
  }
让·弗朗索瓦·法布尔

您不是要关闭FileReader,而是要关闭BufferedReader(对作家来说是相同的)。

由于您没有关闭FileReader/FileWriterfr.close()fw.close()),因此手柄保持活动状态。

在像MacOS-X这样的类Unix系统上,这不是问题,但是在Windows中,如果程序已经具有打开的句柄(读或写)(Windows锁定文件),则无法删除文件,因此会出现错误。

因此,致电fr.close()fw.close(),您的代码将在Windows上运行。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在Mac OSX上使用Zsh Shell和`sed`命令重命名文件

来自分类Dev

在OSX上,git merge删除文件名重命名

来自分类Dev

Python IO是否允许在Windows上删除/重命名打开的文件?

来自分类Dev

chrome.hid.send在PC上无法使用,但在Mac上可以使用

来自分类Dev

是否可以使用文件重命名文件夹?

来自分类Dev

删除和重命名有问题的文件

来自分类Dev

Shell命令(在Mac OSX El Capitan上)以递归方式重命名我的所有DOCX文件

来自分类Dev

在Mac OS X上使用split功能重命名输出文件

来自分类Dev

在Windows上但在Linux上没有数据填充文件

来自分类Dev

使用Dropzone.js删除服务器上的重命名文件

来自分类Dev

在Windows上重命名Git Bash中的文件

来自分类Dev

为什么使用Python重命名gzip文件没有在Windows中重命名实际文件?

来自分类Dev

是否可以使用带有通配符的重命名命令来更改文件名前缀?

来自分类Dev

在Windows上重命名时选择完整的文件名

来自分类Dev

将鼠标悬停在图像上,没有触摸但可以使用,如何删除多余的隐藏图像?

来自分类Dev

在Mac上具有功能透明性,但在Windows上没有?

来自分类Dev

可以使用Roslyn API重命名源文件吗?

来自分类Dev

在Mac上“正在使用” MySQL表,在Windows上可以使用

来自分类Dev

使用unlink()和rename()删除和重命名文件

来自分类Dev

Windows脚本以使用参数重命名和移动文件

来自分类Dev

是否可以使用inode重命名文件或目录?

来自分类Dev

重命名/删除带有前导和尾随空格的Windows(x64)文件夹

来自分类Dev

删除和重命名有问题的文件

来自分类Dev

无法在Windows上重命名DLL文件

来自分类Dev

我可以使用哪个命令在Windows中递归重命名或移动文件?

来自分类Dev

使用Dropzone.js删除服务器上的重命名文件

来自分类Dev

是否可以使用Nautilus撤消文件重命名?

来自分类Dev

如何使用 jmeter 在 Windows 上重命名文件?

来自分类Dev

Jenkins:如何使用 Jenkinsfile 通过远程代理在 Windows 上重命名和复制构建的文件

Related 相关文章

  1. 1

    如何在Mac OSX上使用Zsh Shell和`sed`命令重命名文件

  2. 2

    在OSX上,git merge删除文件名重命名

  3. 3

    Python IO是否允许在Windows上删除/重命名打开的文件?

  4. 4

    chrome.hid.send在PC上无法使用,但在Mac上可以使用

  5. 5

    是否可以使用文件重命名文件夹?

  6. 6

    删除和重命名有问题的文件

  7. 7

    Shell命令(在Mac OSX El Capitan上)以递归方式重命名我的所有DOCX文件

  8. 8

    在Mac OS X上使用split功能重命名输出文件

  9. 9

    在Windows上但在Linux上没有数据填充文件

  10. 10

    使用Dropzone.js删除服务器上的重命名文件

  11. 11

    在Windows上重命名Git Bash中的文件

  12. 12

    为什么使用Python重命名gzip文件没有在Windows中重命名实际文件?

  13. 13

    是否可以使用带有通配符的重命名命令来更改文件名前缀?

  14. 14

    在Windows上重命名时选择完整的文件名

  15. 15

    将鼠标悬停在图像上,没有触摸但可以使用,如何删除多余的隐藏图像?

  16. 16

    在Mac上具有功能透明性,但在Windows上没有?

  17. 17

    可以使用Roslyn API重命名源文件吗?

  18. 18

    在Mac上“正在使用” MySQL表,在Windows上可以使用

  19. 19

    使用unlink()和rename()删除和重命名文件

  20. 20

    Windows脚本以使用参数重命名和移动文件

  21. 21

    是否可以使用inode重命名文件或目录?

  22. 22

    重命名/删除带有前导和尾随空格的Windows(x64)文件夹

  23. 23

    删除和重命名有问题的文件

  24. 24

    无法在Windows上重命名DLL文件

  25. 25

    我可以使用哪个命令在Windows中递归重命名或移动文件?

  26. 26

    使用Dropzone.js删除服务器上的重命名文件

  27. 27

    是否可以使用Nautilus撤消文件重命名?

  28. 28

    如何使用 jmeter 在 Windows 上重命名文件?

  29. 29

    Jenkins:如何使用 Jenkinsfile 通过远程代理在 Windows 上重命名和复制构建的文件

热门标签

归档