Ich bin vor Probleme mit einem meiner Anwendung, und stieß auf die folgende Ausnahme, wenn eine große Menge an Transaktionsabwicklung, die Datei und Lesen des Inhalts beinhaltet öffnen: in javaMuss ich FileInputStream manuell in diesem Code schließen?
java.io.FileNotFoundException: /keystore-sample/keystore.jks (Too many open files)
Ich habe die folgende Beispielcode geschrieben:
try {
EncryptDecryptPassword crypt = new EncryptDecryptPassword();
String secretKey = "secret123";
String trustpassencrypted = "ecnrypted1234";
String trustpass = crypt.decryptPassword(trustpassencrypted.trim(), secretKey.trim());
File truststore = new File("/keystore-sample/keystore.jks");
KeyStore keyStore = KeyStore.getInstance("JKS");
keyStore.load(new FileInputStream(truststore), trustpass.toCharArray());
//Continue with the rest of the code...
} catch (KeyStoreException kse) {
System.out.println("Security configuration failed with the following: " + kse.getCause());
} catch (NoSuchAlgorithmException nsa) {
System.out.println("Security configuration failed with the following: " + nsa.getCause());
} catch (FileNotFoundException fnfe) {
System.out.println("Security configuration failed with the following: " + fnfe.getCause());
} catch (UnrecoverableKeyException uke) {
System.out.println("Security configuration failed with the following: " + uke.getCause());
} catch (CertificateException ce) {
System.out.println("Security configuration failed with the following: " + ce.getCause());
}catch (IOException ioe) {
System.out.println("Security configuration failed with the following: " + ioe.getCause());
}
wie Sie sehen können, habe ich eine neue Instanz für FileInput- Strom nicht erklären, wie die folgenden:
Korrektur: Meines Absicht ist, zum Ausdruck bringen, dass ich nicht die neu erstellte Fileinputstream in einer Variablen zugewiesen haben und es später manuell schließen, wie folgt aus:
FileInputStream in = new FileInputStream(truststore);
keyStore.load(in, trustpass.toCharArray());
//once done with the input stream, close it
in.close();
Meine Frage ist: wird new Fileinputstream (Trusts) erfordert tatsächlich manuellen Schließen oder es wird von der zugrunde liegenden Keystore-Klasse behandelt werden? Kurzer Blick auf den zugrunde liegenden dekompilierten Code von Keystore.class, ich sehe das nicht. Nur um zu bestätigen, dass dies der besondere Grund ist, warum ich die Ausnahme treffe.
Wird die Code-Implementierung oben auch als schlechte Praxis angesehen?
EDIT:
Aufgrund einiger Einschränkung auf Anwendungsumgebung bei mir läuft, wird dies mit alten Java SE 6u34.
Für welche Version von Java schreiben Sie? 1.6, 1.7, 1.8, etc ... einschließlich das wird Menschen helfen, Ihre Frage zu beantworten – Kyrstellaine