In Java: Fehler "Zu viele Dateien öffnen" beim Lesen von einem Netzwerkpfad

9

Ich habe den folgenden Code, der einfach alle Dateien aus einem Ordner liest. In diesem Ordner befinden sich 20.000 Dateien. Der Code funktioniert gut in einem lokalen Ordner ( d:/files ), aber fehlgeschlagen auf einem Netzwerkpfad ( //robot/files ) nach dem Lesen von ca. 1.000 - 2.000 Dateien.

Aktualisieren : Die Ordner sind Kopien voneinander.

Was verursacht dieses Problem und wie kann es behoben werden?

%Vor%

Beim Lesen von einem Netzwerkpfad ( //robot/files ) bekomme ich den folgenden Fehler:

%Vor%

Zeile 12 ist die Zeile:

%Vor%     
Serg 15.11.2012, 16:01
quelle

2 Antworten

2

Es gibt einen dokumentierten Fehler für einige Java-Versionen und einige Dateien werden geöffnet, um ein Limit zu erreichen von 2035. Es ist möglich, dass Sie das gerade getroffen haben.

Aus den Kommentaren:

  

Um das Problem zu klären, gibt es auf Win32-System drei Möglichkeiten, ein zu öffnen   Datei:

     

1: Verwenden der Win32-API

     

2: Verwenden der MFC-Klassen-Framework-Bibliothek.

     

3: Verwenden der C-Library API (open () und fopen ())

     

Anders als die dritte Option, d. h. Option 1 und 2 haben praktisch keine   Beschränkung beim Öffnen von Dateien. Die dritte Methode ist eingeschränkt   (aus dem mir nicht bekannten Grund) nur ca. 2035 Dateien. Das   Deshalb kann MS JVM unbegrenzt (praktisch) Dateien öffnen, aber SUN   JVM schlägt nach 2035 Dateien fehl (meine Vermutung ist, dass es die dritte Methode verwendet   Datei öffnen).

Nun, das ist ein altes Problem, das vor einiger Zeit behoben wurde, aber es ist möglich, dass sie dieselbe Funktion für den Zugriff auf Netzwerk verwenden, wo der Fehler noch bestehen könnte.

Gerade ohne Schließen Sie das Handle oder den Stream, Windows sollte in der Lage sein, & gt; 10000 Dateigriffe zu öffnen und offen zu halten, wie dieser Testcode in den Fehlerkommentaren zeigt:

%Vor%

Sie können es auf der Netzwerkfreigabe testen und einen Fehler melden, falls dieser fehlschlägt. Sie könnten es auch mit einem anderen JDK versuchen. Zumindest mit der Quelle OpenJDK konnte ich außer WinAPI-Aufrufen keine anderen Aufrufe sehen, also würde ich versuchen, wenn das Verhalten das gleiche ist .

    
eis 15.11.2012, 18:04
quelle
1

Versuchen Sie:

%Vor%     
codeghost 15.11.2012 17:39
quelle

Tags und Links