2016-06-08 81 views
0

代码SWT文件放置:标识文件夹

我试图拖放功能添加到我的程序,使用户可以拖放从Windows文件拖放。因此我实现了SWT DropTargetListener接口并添加了一个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. 我怎样才能远离文件夹设置的文件吗?

问候winklerrr

+1

这些似乎是关于在SWT代码的控制之外的Windows资源管理器的行为。放置目标只是获取源想要给它的内容。 –

+2

您拖动了三个项目,一个文件夹和两个文件。这就是你在代码中看到的。如果你想递归获取文件,你必须自己做。您可以使用'Files#isDirectory(Path)'和'Files#isRegularFile(Path)'来区分文件和文件夹。 – Baz

回答

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()); 
     } 
    } 
} 

我从commons-io包使用的FileUtils

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

+1

['File#listFiles()'](https://docs.oracle.com/javase/7/docs/api/java/io/File.html#listFiles())可以做到这一点,没有库。 – Baz