代码
我正在尝试向我的程序添加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
如果我选择folder1
,file1
和file2
并将其拖放到我的程序中,则输出结果为:
path/to/folder1
path/to/file1.png
path/to/file2.exe
问题
为什么文件夹中的文件没有放到程序中?如何归档这些文件也被删除?
如何将文件与文件夹区分开来?
关心winklerrr
答案 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()