java - SWT 文件删除 : identify folders

标签 java drag-and-drop swt

代码

我正在尝试向我的程序添加拖放功能,以便用户可以从 Windows 拖放文件。因此我实现了 SWT DropTargetListener接口(interface)并添加了SWT DropTarget到我的 SWT 控件。

public class MyFileDrop implements DropTargetListener {

public MyFileDrop(final Control control) {
    addDropTarget(control);
}

private void addDropTarget(final Control control) {
    final DropTarget dropTarget = new DropTarget(control, DND.DROP_COPY | DND.DROP_DEFAULT);
    dropTarget.setTransfer(new Transfer[] { FileTransfer.getInstance() });
    dropTarget.addDropListener(this);
}

@Override
public void drop(final DropTargetEvent event) {
    String[] fileNames = (String[]) event.data;
    for (final String fileName : fileNames) {
        System.out.println(fileName);
    }
}

// other DropTargetListener methods [...]
}

如果我将文件夹从 Windows 资源管理器拖放到我的控件中,则会打印出文件夹名称。但未列出该放置的文件夹内的所有文件。

示例

folder1
- subfile1.png
- subfile2.exe
file1.png
file2.exe

如果我选择 folder1file1file2 并将其拖放到我的程序中,则输出如下:

path/to/folder1
path/to/file1.png
path/to/file2.exe

问题

  1. 为什么文件夹内的文件没有拖放到程序中?我怎样才能存档这些文件也被删除?

  2. 如何将文件与文件夹分开?

问候温克勒尔

最佳答案

代码

这就是我的解决方案

@Override
public void drop(DropTargetEvent event) {
    String[] fileNames = (String[]) event.data;
    for (String fileName : fileNames) {
        final File file = new File(fileName);
        if (file.isDirectory()) {
            Collection<File> subFiles = FileUtils.listFiles(file, TrueFileFilter.INSTANCE, TrueFileFilter.INSTANCE);
            for (File subFile : subFiles) {
                System.out.println(subFile.getAbsolutePath());
            }
        } else {
            System.out.println(file.getAbsolutePath());
        }
    }
}

我使用了FileUtils来自commons-io包。

示例

folder1
- subfile1.png
- subfile2.exe
file1.png
file2.exe

使用新代码,现在的输出是:

path/to/folder1/subfile1.png
path/to/folder1/subfile2.exe
path/to/file1.png
path/to/file2.exe

答案

如何归档这些文件也被删除?
FileUtils.listFiles(File, IOFileFilter, IOFileFilter)

如何将文件与文件夹分开?
File.isDirectory()

关于java - SWT 文件删除 : identify folders,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37705552/

相关文章:

c# - 拖动时比较 WinForms 控件位置

java - SWT:如何通过选择文件来打开资源管理器?

java - 如何处理txt文件中的空格/制表符

java - 通过拆分和运行将 ListenableFuture<Iterable<A>> 转换为 Iterable<ListenableFuture<B>>

c++ - 异步 OLE 拖放可能吗?

Java SWT 与线程 "main"java.lang.NoClassDefFoundError : org/eclipse/swt/widgets/Composite 中的 maven 异常

java - 如何设置GridData的宽度?

java - 如何检查intellij中的java编译错误

java - 从 JTextField 中检索文本

Javascript inside.HTML 不能与函数一起使用 - 创建可移动的 div