SWT文件丢弃:识别文件夹

时间:2016-06-08 14:35:15

标签: java drag-and-drop swt

代码

我正在尝试向我的程序添加drop功能,以便用户可以从Windows拖放文件。因此,我实施了SWT DropTargetListener界面,并在我的SWT控件中添加了SWT DropTarget

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. 如何将文件与文件夹区分开来?

  3. 关心winklerrr

1 个答案:

答案 0 :(得分:1)

<强>代码

所以这是我的解决方案

@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()