winklerrr
winklerrr

Reputation: 14737

SWT file drop: identify folders

Code

I'm trying to add drop functionality to my program so users can drag and drop files from Windows. Therefore I implemented the SWT DropTargetListener interface and added a SWT DropTarget to my SWT control.

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 [...]
}

If I drag and drop a folder from Windows Explorer to my control, the folder name gets printed out. But all files inside that dropped folder aren't listed.

Example

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

If I select folder1, file1 and file2 and drag and drop it to my program, this is the output:

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

Questions

  1. Why aren't the files inside the folder dropped to the program? How can I archive that these files are also dropped?

  2. How can I set the files apart from the folder?

Regards winklerrr

Upvotes: 0

Views: 449

Answers (1)

winklerrr
winklerrr

Reputation: 14737

Code

So this is my solution

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

I used the FileUtils from the commons-io package.

Example

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

With the new code, this is now the output:

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

Answers

How can I archive that these files are also dropped?
FileUtils.listFiles(File, IOFileFilter, IOFileFilter)

How can I set the files apart from the folder?
File.isDirectory()

Upvotes: 2

Related Questions