-Affiche un exemple de description lorsque l'instruction try-with-resources est utilisée et lorsqu'elle n'est pas utilisée. · Fournit des liens vers des sites Web utiles pour comprendre la déclaration try-with-resources. -La déclaration try-with-resources peut être utilisée dans Java SE 7 ou version ultérieure. -Les classes que l'instruction try-with-resources peut utiliser sont limitées aux classes d'implémentation de l'interface AutoCloseable et de sa sous-interface Closeable.
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class TryWithResources {
public static void main(String[] args) {
String inFilePath = "D:\\A.txt";
String outFilePath = "D:\\C.txt";
FileInputStream in = null;
FileOutputStream out = null;
try {
in = new FileInputStream(inFilePath);
out = new FileOutputStream(outFilePath);
int c;
//Copier des données
while ((c = in.read()) != -1) {
out.write(c);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if (in != null) {
try {
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (out != null) {
try {
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
point
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class TryWithResources {
public static void main(String[] args) {
String inFilePath = "D:\\A.txt";
String outFilePath = "D:\\C.txt";
try (FileInputStream in = new FileInputStream(inFilePath);
FileOutputStream out = new FileOutputStream(outFilePath);) {
int c;
//Copier des données
while ((c = in.read()) != -1) {
out.write(c);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
point
La portée de la variable est limitée à la clause try.
Instruction try-with-resources de la documentation Oracle Java SE TASK NOTES [Java] syntaxe try-with-resources try-catch-finally, try-with-resources et exceptions qui se sont produites
Des classes telles que FileInputStream appellent se fermer dans la méthode finalize, il est donc difficile de remarquer (ou de se produire) le bogue des fuites de versions de ressources. Cependant, laisser l'ouverture au GC est inefficace et n'est pas une bonne pratique, alors utilisez try-with-resources.
FileInputStream.java
package java.io;
import java.nio.channels.FileChannel;
import sun.nio.ch.FileChannelImpl;
public
class FileInputStream extends InputStream
{
===========================réduction===========================
/**
* Closes this file input stream and releases any system resources
* associated with the stream.
*
* <p> If this stream has an associated channel then the channel is closed
* as well.
*
* @exception IOException if an I/O error occurs.
*
* @revised 1.4
* @spec JSR-51
*/
public void close() throws IOException {
synchronized (closeLock) {
if (closed) {
return;
}
closed = true;
}
if (channel != null) {
channel.close();
}
fd.closeAll(new Closeable() {
public void close() throws IOException {
close0();
}
});
}
===========================réduction===========================
/**
* Ensures that the <code>close</code> method of this file input stream is
* called when there are no more references to it.
*
* @exception IOException if an I/O error occurs.
* @see java.io.FileInputStream#close()
*/
protected void finalize() throws IOException {
if ((fd != null) && (fd != FileDescriptor.in)) {
/* if fd is shared, the references in FileDescriptor
* will ensure that finalizer is only called when
* safe to do so. All references using the fd have
* become unreachable. We can call close()
*/
close();
}
}
}
Recommended Posts