2016-06-08 1 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 в свой элемент управления, имя папки будет распечатано. Но все файлы внутри этой упавшей папки не указаны.

Пример

папка1
- subfile1.png
- subfile2.exe
file1.png
file2.exe

Если я выбираю folder1, file1 и file2 и перетащите его в свою программу, это является выход:

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

Вопросы

  1. Почему не файлы внутри папки упал в программе? Как я могу архивировать, что эти файлы также удалены?

  2. Как я могу установить файлы отдельно от папки?

С уважением winklerrr

+1

Это похоже на поведение проводника Windows, находящегося вне контроля SWT-кода. Цель снижения только получает то, что источник хочет дать. –

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

Я использовал 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()

+1

['File # listFiles()'] (https://docs.oracle.com/javase/7/docs/api/java/io/File.html#listFiles()) сделал бы это также без библиотеки , – Baz

Смежные вопросы