2016-06-08 14 views
0

-CodeSWT-Datei ablegen: identifizieren Ordner

Ich versuche Drop-Funktionalität zu meinem Programm hinzuzufügen, so dass Benutzer können Dateien aus dem Windows per Drag & Drop. Deshalb habe ich die SWT DropTargetListener Schnittstelle implementiert und eine SWT DropTarget zu meiner SWT Steuerung hinzugefügt.

Wenn ich einen Ordner aus Windows Explorer in mein Steuerelement ziehen und ablegen, wird der Ordnername ausgedruckt. Alle Dateien in diesem Ordner werden jedoch nicht aufgelistet.

Beispiel

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

Wenn ich folder1 wählen, file1 und file2 und ziehe es in mein Programm der Ausgang ist:

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

Fragen

  1. Warum nicht die Dateien in den Ordner auf das Programm gefallen? Wie kann ich archivieren, dass diese Dateien auch gelöscht werden?

  2. Wie kann ich die Dateien von dem Ordner unterscheiden?

Grüße winklerrr

+1

Dies scheint über das Verhalten von Windows Explorer zu sein, die außerhalb der Kontrolle des SWT-Codes ist. Das Drop-Ziel erhält nur, was die Quelle ihm geben will. –

+2

Sie haben drei Elemente, einen Ordner und zwei Dateien gezogen. Das sehen Sie in Ihrem Code. Wenn Sie Dateien rekursiv abrufen möchten, müssen Sie dies selbst tun. Sie können zwischen Dateien und Ordnern unterscheiden, indem Sie 'Files # isDirectory (Path)' und 'Files # isRegularFile (Path)' verwenden. – Baz

Antwort

1

-Code

Also das ist meine Lösung

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

Ich benutzte die FileUtils vom commons-io Paket.

Beispiel

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

Mit dem neuen Code, das ist jetzt die Ausgabe:

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

Antworten

Wie kann ich archivieren, dass diese Dateien ebenfalls gelöscht werden?
FileUtils.listFiles(File, IOFileFilter, IOFileFilter)

Wie kann ich die Dateien abgesehen von den Ordner festgelegt?
File.isDirectory()

+1

['File # listFiles()'] (https://docs.oracle.com/javase/7/docs/api/java/io/File.html#listFiles()) hätte es auch ohne eine Bibliothek geschafft . – Baz