Mein Ziel ist zu überprüfen, ob eine Datei mit einem bestimmten (Teil des Namens) in einem Ordner im Netzwerk gefunden wird, auch unter Berücksichtigung aller Ordner darunter. Um dies zu tun, brauche ich eine Möglichkeit, um eine Liste aller Dateien und Ordner in und unter einem bestimmten Ordner zu erhalten. Meine rekursive Funktion führt ~ 2500 Objekte/s auf einem lokalen Laufwerk, aber nur einige/Sek auf einem Netzlaufwerk. Ich brauche etwas schneller.Wie benutzt man java.nio in Matlab?
Die Kernfrage ist: Was ist der schnellste Weg, um eine Liste von Elementen in einem Ordner einschließlich des Attributs isDirectory oder etwas ähnliches zu erhalten?
Ich habe meine Hoffnung auf die WalkFileTree-Funktionalität von java.nio, aber ich kann es nicht verwenden. (Version: 8.4.0.150421 (R2014b) mit Java 1.7.0_11-b21 mit Oracle Corporation Java HotSpot ™ 64-Bit Server VM Mischbetrieb)
Aktuelle Problem: Ich kann keine Funktionalität von java.nio verwenden
java.io funktioniert, z Erstellen Sie eine Datei Objekt:
jFile = java.io.File('C:\')
% then use jFile.list or jFile.isDirectory or jFile.toPath, it all works!
Naiv Aufruf nio fehlschlägt:
java.nio.file.Files('C:\')
% -> No constructor 'java.nio.file.Files' with matching signature found.
Ich weiß, java.nio.file ein wenig anders funktioniert, ist die Methoden in Dateien zu verwenden, ein Weg benötigt, die sein kann erstellt mit java.nio.file.Path.get. Dieses Ding isst eine Schnur. Aber dies nicht gelingt auch:
java.nio.file.Paths.get('C:\') % -> No method 'get' with matching signature found for class 'java.nio.file.Paths'.
jedoch das Verfahren besteht:
methods java.nio.file.Paths
% -> Methods for class java.nio.file.Paths:
equals getClass notify toString
get hashCode notifyAll wait
Also, was falsch ist hier los? Ich darf keine Matlab-Saite füttern? Sollte ich eine Java-Zeichenfolge verwenden? Auch dies fehlschlägt:
jString = java.lang.String('C:\');
java.nio.file.Paths.get(jString)
% -> No method 'get' with matching signature found for class 'java.nio.file.Paths'.
Ein Orakel Abhilfe ist, den Weg in java.io zu schaffen, aber Fütterung, dass auch java.nio versagt ..
path = java.io.File('C:\').toPath;
java.nio.file.Files.isDirectory(path)
% -> No method 'isDirectory' with matching signature found for class 'java.nio.file.Files'.
Also ich nicht näher bin immer zu sogar den WalkFileTree ausprobieren. Ich kann java.nio nicht dazu bringen, irgendetwas in Matlab zu tun.
Hilfe: Hat jemand eine Idee, wie man die Funktionen von java.nio.file aufruft oder meine Kernfrage beantwortet?
ps: Beispiele für einfache Methoden bisher ohne java.nio, Beispiele tun nicht umfassen die rekursive Teil zeigen aber die schreckliche Leistung
Strategie 1: rekursiv Matlab ‚dir‘ Funktion verwenden. Es ist eine nette Funktion, da es auch Attribute gibt, aber es ist ein bisschen langsam. In meinem Ausgangsnetzwerkordner (enthält 150 Dateien/Ordner, Pfad als String sDir gespeichert) den folgenden Befehl nimmt 34,088842 sec:
tic;d=dir(Sdir);toc
Strategie 2: java.io.File verwenden, um Dinge zu beschleunigen, dies kaum hilft, da isDirectory aufgerufen werden muss. Die Verwendung einer Heuristik für die Namen der Elemente ist zu gefährlich, ich bin gezwungen, Ordner mit Punkten zu verwenden. Beispiel in demselben Verzeichnis, 31.315.587 sec:
tic;jFiles = java.io.File(Sdir).listFiles;
LCVdir = arrayfun(@isDirectory, jFiles, 'UniformOutput',0);
toc