2017-02-10 2 views
1

In einem Java-Programm, ich bin ein java.nio.Path Objekt gegeben und ich brauche eine Datei zu sperren, und dann daraus ein java.util.Properties Objekt zu laden.Wie kann ich in Java mithilfe der java.nio-Bibliothek und eines FileChannel ein Properties-Objekt aus einer Datei laden?

ich gelesen, dass der richtige Weg, eine gemeinsame Sperre für eine Datei, als Path dargestellt zu bekommen, ein java.nio.channels.FileChannel sperren sie mit einer gemeinsamen Sperre channel.lock(0L, Long.MAX_VALUE, true)

final FileChannel channel = FileChannel.open(filePath, StandardOpenOption.READ); 
final FileLock lock = channel.lock(0L, Long.MAX_VALUE, true); 

Jetzt zu bekommen, ist, dass ich den Kanal gesperrt haben Ich nehme an, dass ich jetzt auf diesen Kanal verweisen sollte, wenn ich meine Eigenschaftendatei lade.

Allerdings sehe ich keine einfache Möglichkeit, eine FileChannel in etwas zu übersetzen, das von Properties gelesen werden kann. Properties dauert eine InputStream oder eine Reader. Ich könnte meinen eigenen Leser implementieren, aber ich bin mir sicher, dass mein Team lieber etwas Out-of-the-Box verwenden würde, falls verfügbar.

Kennt jemand so etwas?

Sind meine zugrunde liegenden Annahmen als falsch? Wenn ja, was ist der richtige Ablauf für dieses Verfahren?

+0

Was mit all ist die Verriegelung und 'FileChannel' Komplikation? Das Lesen der regulären Eigenschaft ist wirklich einfach. – Kayaman

+0

Ich erwarte, dass externe Prozesse in diese Datei schreiben. Ich möchte nicht versuchen, die Eigenschaften gleichzeitig zu laden, während ein anderer Prozess sie ändert. – ds390s

+0

Scheint wie dateibasierte Kommunikation eine schlechte Passform sein könnte. – Kayaman

Antwort

1

Es scheint, dass Sie die Existenz der Channels Helferklasse verpasst:

Properties properties=new Properties(); 

try(final FileChannel channel = FileChannel.open(filePath, StandardOpenOption.READ); 
    final FileLock lock = channel.lock(0L, Long.MAX_VALUE, true)) { 

    properties.load(Channels.newInputStream(channel)); 
} 
Verwandte Themen