Reputation: 14737
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
Why aren't the files inside the folder dropped to the program? How can I archive that these files are also dropped?
How can I set the files apart from the folder?
Regards winklerrr
Upvotes: 0
Views: 449
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