个性化阅读
专注于IT技术分析

try-with-resources语句

本文概述

在Java中, try-with-resources语句是一个try语句, 用于声明一个或多个资源。资源是一个对象, 在完成程序后必须将其关闭。 try-with-resources语句可确保在语句执行结束时关闭每个资源。

你可以传递实现java.lang.AutoCloseable的任何对象, 其中包括实现java.io.Closeable的所有对象。

以下示例将字符串写入文件。它使用FileOutputStream的实例将数据写入文件。 FileOutputStream是一种资源, 程序完成后必须将其关闭。因此, 在此示例中, 资源关闭是由try本身完成的。


资源尝试示例1

import java.io.FileOutputStream;  
public class TryWithResources {  
public static void main(String args[]){    
		// Using try-with-resources
try(FileOutputStream fileOutputStream =newFileOutputStream("/java7-new-features/src/abc.txt")){    
String msg = "Welcome to srcmini!";    
byte byteArray[] = msg.getBytes(); //converting string into byte array    
fileOutputStream.write(byteArray);
System.out.println("Message written to file successfuly!");    
}catch(Exception exception){
	   System.out.println(exception);
}    
}    
}

输出:

Message written to file successfuly!

文件输出

Welcome to srcmini!

资源尝试示例:使用多个资源

import java.io.DataInputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;  
public class TryWithResources {  
public static void main(String args[]){    
		// Using try-with-resources
try(	// Using multiple resources
		FileOutputStream fileOutputStream =new FileOutputStream("/java7-new-features/src/abc.txt");
		InputStream input = new FileInputStream("/java7-new-features/src/abc.txt")){
	    // -----------------------------Code to write data into file--------------------------------------------//
	    String msg = "Welcome to srcmini!";    
	    byte byteArray[] = msg.getBytes(); 	// Converting string into byte array    
	    fileOutputStream.write(byteArray);	// Writing  data into file
	    System.out.println("------------Data written into file--------------");
	    System.out.println(msg);
	    // -----------------------------Code to read data from file---------------------------------------------//
	    // Creating input stream instance
	    DataInputStream inst = new DataInputStream(input);  
	    int data = input.available();  
	    // Returns an estimate of the number of bytes that can be read from this input stream. 
	    byte[] byteArray2 = new byte[data];	//  
	    inst.read(byteArray2);  
	    String str = new String(byteArray2); // passing byte array into String constructor
	    System.out.println("------------Data read from file--------------");
	    System.out.println(str); // display file data
}catch(Exception exception){
	   System.out.println(exception);
}   
}    
}

输出:

------------Data written into file--------------
Welcome to srcmini!
------------Data read from file--------------
Welcome to srcmini!

你可以使用try-with-resources语句使用catch和finally块, 就像普通的try语句一样。

注–在try-with-resources语句中, catch或finally块在声明的资源关闭后执行。


Try-with-resources示例:使用finally块

import java.io.FileOutputStream;  
public class TryWithResources {  
public static void main(String args[]){    
try(	FileOutputStream fileOutputStream=
  new FileOutputStream("/home/irfan/scala-workspace/java7-new-features/src/abc.txt")){
	// -----------------------------Code to write data into file--------------------------------------------//
	    String msg = "Welcome to srcmini!";    
     	byte byteArray[] = msg.getBytes(); 	// Converting string into byte array    
	    fileOutputStream.write(byteArray);	// Writing  data into file
	    System.out.println("Data written successfully!");
}catch(Exception exception){
	   System.out.println(exception);
}
finally{
	   System.out.println("Finally executes after closing of declared resources.");
}
}    
}

输出:

Data written successfully!
Finally executes after closing of declared resources.

禁止的异常

如果try块引发异常, 并且try-with-resources引发一个或多个异常, 则try-with-resources引发的异常将被抑制。换句话说, 可以说, 尝试资源引发的异常是被抑制的异常。

你可以使用Throwable类的getSuppress()方法获取这些异常。

Java在Throwable类中添加了一个新的构造函数和两个新方法来处理受抑制的异常。

建设者 描述
protected Throwable(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) 它使用指定的详细消息, 原因, 启用或禁用抑制以及可写的堆栈跟踪启用或禁用来构造新的throwable。

方法 描述
公共最终无效addSuppressed(Throwable异常)/ td> 它将指定的异常附加到为了传递此异常而被抑制的异常。此方法是线程安全的, 通常由try-with-resources语句(自动和隐式)调用。它引发以下异常:IllegalArgumentException:如果异常是可抛出的, 则throwable无法抑制自身。 NullPointerException:如果exception为null。
public final Throwable[] getSuppressed() 它返回一个数组, 其中包含被try-with-resources语句抑制的所有异常。如果没有抑制异常或禁用抑制, 则返回一个空数组。
赞(0)
未经允许不得转载:srcmini » try-with-resources语句

评论 抢沙发

评论前必须登录!