2016-06-08 74 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