【问题标题】:How to copy-paste, and cut-paste file or folder in java?如何在java中复制粘贴和剪切粘贴文件或文件夹?
【发布时间】:2012-12-29 14:50:03
【问题描述】:

我在 java 中使用 netbeans 平台制作了一个桌面应用程序。在我的应用程序中,我想为文件或文件夹提供单独的复制粘贴和剪切粘贴选项。

那我该怎么做呢?我试过Files.copy(new File("D:\\Pndat").toPath(),new File("D:\\212").toPath(), REPLACE_EXISTING);。但我没有得到确切的输出。

如果还有其他选择,请建议我。

【问题讨论】:

  • 所以您想使用 swing 应用程序将文件从另一个文件夹复制到另一个文件夹?更新您有问题的代码,以便检查您尝试过的内容以及问题出在哪里
  • 哪一部分你做不到?选择文件/目录?提取选定的文件/目录名称?复制到剪贴板?
  • @TJ-我不知道如何使用剪贴板在java中进行复制、剪切和粘贴。你有剪贴板的例子吗?
  • @vels4j 我更新了我所做的。但是该代码在 D: 驱动器中创建了 212 名称的文件夹,但它没有将 Pndat 文件夹复制到 212 文件夹中。那么如何在 java 中做到这一点呢?
  • 你需要复制整个文件夹吗?

标签: java swing copy paste


【解决方案1】:

如果是“剪切粘贴”,您可以像这样使用renameTo()

File source = new File("////////Source path");
File destination = new File("//////////destination path");

if (!destination.exists()) {
    source.renameTo(destination);
}

如果是“复制粘贴”,您需要读取输入和输出流。

【讨论】:

    【解决方案2】:

    使用来自 apache io 的 FileUtils 并执行 FileUtils.copyDirectory(sourceDir, destDir);

    您还可以进行以下文件操作

    • 写入文件
    • 从文件中读取
    • 创建一个包含父目录的目录
    • 复制文件和目录
    • 删除文件和目录
    • 与 URL 相互转换
    • 按过滤器和扩展名列出文件和目录
    • 比较文件内容
    • 文件上次更改日期

    Download link 用于 apache i/o jar。

    【讨论】:

      【解决方案3】:

      我认为这个问题与使用系统剪贴板复制 Java 应用程序中指定的文件以及使用操作系统“粘贴”功能将文件复制到文件夹有关。这是一个简短的说明性示例,它将向您展示如何将单个文件添加到操作系统剪贴板,以便稍后执行操作系统“粘贴”功能。根据需要进行调整并根据需要添加错误/异常检查。

      作为辅助,此代码还将文件名放在剪贴板上,以便您可以将文件名粘贴到文档编辑器中。

      package com.example.charles.clipboard;
      
      import java.awt.Toolkit;
      import java.awt.datatransfer.Clipboard;
      import java.awt.datatransfer.ClipboardOwner;
      import java.awt.datatransfer.DataFlavor;
      import java.awt.datatransfer.Transferable;
      import java.io.File;
      import java.io.FileNotFoundException;
      import java.util.ArrayList;
      import java.util.List;
      
      public class JavaToSystemClipboard {
      
      public static void main(final String[] args) throws Exception {
          final File fileOut = new File("someFileThatExists");
          putFileToSystemClipboard(fileOut);
      
      }
      
      public static void putFileToSystemClipboard(final File fileOut) throws Exception {
          final Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
          final ClipboardOwner clipboardOwner = null;
      
          final Transferable transferable = new Transferable() {
              public boolean isDataFlavorSupported(final DataFlavor flavor) {
                  return false;
              }
              public DataFlavor[] getTransferDataFlavors() {
                  return new DataFlavor[] { DataFlavor.javaFileListFlavor, DataFlavor.stringFlavor };
              }
              public Object getTransferData(final DataFlavor flavor) {
                  if (flavor.equals(DataFlavor.javaFileListFlavor)) {
                      final List<String> list = new ArrayList<>();
                      list.add(fileOut.getAbsolutePath());
                      return list;
                  }
                  if (flavor.equals(DataFlavor.stringFlavor)) {
                      return fileOut.getAbsolutePath();
                  }
                  return null;
              }
          };
          clipboard.setContents(transferable, clipboardOwner);
      }
      }
      

      【讨论】:

        【解决方案4】:

        您可以使用 FileOutputStreamFileInputStream 自己编写内容,也可以使用 Apache Camel

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2014-01-19
          • 1970-01-01
          • 2014-12-14
          • 2020-12-07
          • 1970-01-01
          • 2017-10-14
          • 1970-01-01
          相关资源
          最近更新 更多